web-dev-qa-db-ja.com

wssはhttpsでは機能しませんが、wsはhttp Apache2ubuntuでは機能します

私の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_httpproxy_wstunnelproxy_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サーバーエラーが発生しました。

このプロキシがどのように機能するかはわかりませんでしたが、盲目的に試してみました。私の間違いを訂正してください、これを修正するのを手伝ってください。ありがとう。

サーバーの詳細:

  • AWS EC2 ubuntuインスタンスで実行されているApache 2.4.18。
  • パブリックIP:xx.yy.xx.yy
  • プライベートIP:aa.bb.aa.bb

WebSocketのセットアップ:

バックエンド(php)接続にはプライベートIPを使用し、フロントエンドにはパブリックIPを使用します。

1
krk

自分で直した。 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で動作し始めました。

2
krk