Amazon-Ec2
wss 在 https 中不起作用,但 ws 在 http apache2 ubuntu 中起作用
我的 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 中工作。