私が依存しているwebsocketライブラリ( PHP-Websockets )は、まだ安全なソケット(wss
)をサポートしていません。私のウェブサイトはhttps
経由で提供されているため、安全でないws
接続を使用できません。
私は Apacheの_mod_proxy
_ を使用して、ブラウザからの安全な要求をクライアントに転送しようとしています。
Javascript
_var ws = new Websocket('wss://example.com/_ws_/');
_
Apache VirtualHosts
_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_ /に対して有効なプロトコルハンドラはありませんでした。 mod_proxyのDSOバージョンを使用している場合は、プロキシサブモジュールがLoadModuleを使用した構成に含まれていることを確認してください。
プロキシルールを削除して、ユーザーをhttps
にリダイレクトするのをやめ、ブラウザから安全でないソケットに接続しようとすると、確認しました:new Websocket('ws://example.com/')
、問題なく動作します。
ロードしたApacheモジュールには、_mod_ssl.c
_、_mod_proxy.c
_、および_mod_proxy_http.c
_が含まれます
_Apache 2.4
_
物事を機能させるには、 mod_proxy_wstunnel
私がやると、このルールセットは機能しました:(websocketリクエストを受信してプロキシするドメインのVirtualHost
内)
<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_/');