私のwebsocketセットアップはhttpで動作します。しかし、ssl(lets encrypt)を有効にしてws://
をwss://
に変更すると、ブラウザがこのエラーをスローします。
WebSocket connection to 'wss://xx.yy.xx.yy:5001/' failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
Javascript:
var ws = new WebSocket('wss://xx.yy.xx.yy:5001');
次に、次のApacheモジュールを有効にしました:proxy_http
、proxy_wstunnel
、proxy_balancer
そして、これらの行を/etc/Apache2/sites-enabled/000-default-le-ssl.conf
に追加しました
<IfModule mod_proxy.c>
ProxyPass / ws://xx.yy.xx.yy:5001
ProxyPassReverse / ws://xx.yy.xx.yy:5001
</IfModule>
500サーバーエラーが発生しました。
このプロキシがどのように機能するかはわかりませんでしたが、盲目的に試してみました。私の間違いを訂正してください、これを修正するのを手伝ってください。ありがとう。
サーバーの詳細:
WebSocketのセットアップ:
バックエンド(php)接続にはプライベートIPを使用し、フロントエンドにはパブリックIPを使用します。
自分で直した。 JavaScriptを次のように変更しました。
var ws = new WebSocket('wss://domain.com/ws/');
ターミナルで次のコマンドを実行して、プロキシモジュールを有効にします。
Sudo a2enmod proxy proxy_balancer proxy_wstunnel proxy_http
私のApache virtualhost設定ファイルにこれらの行を追加しました(/etc/Apache2/sites-enabled/000-default-le-ssl.conf
)
ProxyRequests Off
ProxyPass "/ws/" "ws://domain.com:5001/"
Apacheサービスを再起動しました。そして、websocketはhttpsで動作し始めました。