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

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

我的 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_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 服务器错误。

虽然我不知道这个代理是如何工作的,但只是盲目尝试了一下。请纠正我的错误,帮助我解决这个问题。谢谢。

服务器详细信息:

  • 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 中工作。

相关内容