Ssl
Apache mod_proxy:將安全 websocket 轉發到非安全
我依賴的 websocket 庫 ( PHP-Websockets ) 還不支持安全套接字 (
wss
)。不過,我的網站服務已結束https
,因此我不能使用不安全ws
的連接。我正在嘗試使用Apache
mod_proxy
將來自瀏覽器的安全請求轉發到客戶端。Javascript
var ws = new Websocket('wss://example.com/_ws_/');
阿帕奇虛擬主機
ProxyPass "/_ws_/" "ws://127.0.0.1:8080/" ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/" # I've also tried "/_ws_/" "ws://example.com:8080/" Same error below
在嘗試連接時,瀏覽器會收到一個
500 Server Error
. 日誌顯示:沒有協議處理程序對 URL /ws/ 有效。如果您使用的是 DSO 版本的 mod_proxy,請確保代理子模組包含在使用 LoadModule 的配置中。
我已經確認,如果我刪除代理規則,停止將使用者重定向到
https
並嘗試從瀏覽器連接到不安全的套接字:new Websocket('ws://example.com/')
,一切正常。我載入的 Apache 模組包括
mod_ssl.c
,mod_proxy.c
和mod_proxy_http.c
Apache 2.4
為了讓事情正常工作,我還需要載入
mod_proxy_wstunnel
一旦我這樣做了,這個規則集就開始工作了:(在
VirtualHost
接收和代理 websocket 請求的域中)<IfModule mod_proxy.c> ProxyPass "/_ws_/" "ws://127.0.0.1:8080/" ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/" </IfModule>
然後瀏覽器可以通過 HTTPS 埠聯繫後端 WS 伺服器:
var ws = new Websocket('wss://example.com/_ws_/');