Amazon-Ec2

wss 在 https 中不起作用,但 ws 在 http apache2 ubuntu 中起作用

  • January 19, 2022

我的 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 伺服器錯誤。

雖然我不知道這個代理是如何工作的,只是盲目嘗試。請糾正我的錯誤,幫助我解決這個問題。謝謝。

伺服器詳情:

  • 在 AWS EC2 ubuntu 實例中執行的 Apache 2.4.18。
  • 公共IP:xx.yy.xx.yy
  • 私人IP:aa.bb.aa.bb

網路套接字設置:

我使用私有 ip 進行後端(php)連接和前端的公共 ip。

好吧,我自己修好了。我將我的 javascript 更改為:

var ws = new WebSocket('wss://domain.com/ws/');

通過在終端中執行以下命令啟用代理模組,

sudo a2enmod proxy proxy_balancer proxy_wstunnel proxy_http

在我的 Apache 虛擬主機配置文件中添加了這些行(/etc/apache2/sites-enabled/000-default-le-ssl.conf

ProxyRequests Off
ProxyPass "/ws/"  "ws://domain.com:5001/"

重啟apache服務。websocket 開始在 https 中工作。

引用自:https://serverfault.com/questions/917672