我的 websocket 设置在 http 中有效。但是,如果我启用 ssl(让加密)并将 更改为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 服务器错误。
虽然我不知道这个代理是如何工作的,但只是盲目尝试了一下。请纠正我的错误,帮助我解决这个问题。谢谢。
服务器详细信息:
- Apache 2.4.18 在 AWS EC2 ubuntu 实例中运行。
- 公网 IP:xx.yy.xx.yy
- 私有 IP:aa.bb.aa.bb
Websocket 设置:
我使用私有 IP 进行后端(php)连接,并使用公共 IP 进行前端连接。
答案1
好吧,我自己修复了这个问题。我将 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 中工作。