花了一天的大部分时间试图找到解决方案,但空手而归。
如果我在HTTP上启动我的网站,则ws连接可以正常工作:
this.conn = new WebSocket('ws://example.com:8080');
this.conn.onopen = () => {};
但是,一旦我切换到HTTPS(已安装证书且未进行自签名),Websocket连接就会失败,因为现代浏览器不允许在通过HTTPS服务的网站上进行不安全的Websocket连接。
所以我将JS连接更改为:
this.conn = new WebSocket('wss://example.com:8080');
this.conn.onopen = () => {};
现在,wss连接挂起(挂起)了一段时间,最后浏览器返回了:
WebSocket connection to 'wss://example.com:8080/' failed: WebSocket opening handshake timed out
我知道为什么会这样,因为我没有设置8080端口来处理wss,但这是我迷路的地方。
我正在服务器上运行 Plesk Onyx 17.8.11 ,并且我已经完成了以下工作(在阅读了有关该主题的内容后,我已经找到了):
通过工具和设置> Apache Web服务器> Apache模块启用proxy_wstunnel
在网站和域> Apache和nginx设置> HTTP的附加指令和HTTPS的附加指令中添加了以下几行:
ProxyPass / ws://example.com:8080
ProxyPassReverse / ws://example.com:8080
但这完全破坏了Apache(500错误)。
将其更改为:
ProxyPass /ws ws://example.com:8080
ProxyPassReverse /ws ws://example.com:8080
然后将JS调用更改为:
this.conn = new WebSocket('wss://example.com:8080/ws');
导致与以前相同的握手错误。
有人知道如何使用Plesk设置安全的Websocket吗?我找到了很多文章和帖子,它们直接讨论修改apache配置文件,但是Plesk根本不喜欢这样做,所以我真正追求的是使用Plesk的解决方案。他们似乎忽略了Plesk用户在其自己的论坛上提出的其他请求,提出了相同的问题,这就是为什么我要问SO专家;)