我有一个基于 websocket/nodejs 的聊天,它在 Chrome/Firefox/Edge/Opera 上运行良好(嵌入式 VPN 已禁用)。
但是,当我打开 Opera 中的嵌入式 VPN 时,我会随机断开连接。通常它会在 10 秒后发生,无论我是否发送消息。如果我发送消息,它们都会顺利发送,直到 10 秒左右后断开连接。即使没有任何消息,也会发生断开连接。
不确定它是否可以相关,但我在 Apache 代理后面使用nodejs,配置如下(HTTP 在 8081 后面,WSS 在 8080 后面,全部封装在 443 中):
<VirtualHost MY_IP:443>
ServerName www.mydomain.com
SSLProxyEngine On
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) wss://localhost:8080/$1 [P,L]
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>
<VirtualHost localhost:8081>
DocumentRoot /var/www/www.mydomain.com/
</VirtualHost>
我陷入困境,因为我在客户端或服务器上没有收到任何错误消息。
最佳答案
就我而言,我发现一些请求缺少几个 header ,例如连接:升级
和升级:websocket
。感觉像是 Opera 浏览器上的 WebSocket 客户端因未发送这 2 个 header 而出现故障,或者 Opera 的代理服务器可能降级了客户端的安全 Websocket 请求,解密并删除了一些 header ,因为其他 Websocket 握手 header (如 Sec-WebSocket-*
)保持不变。
我不太清楚您的情况,也许您应该查看日志并查看服务器上收到的 header 。当我查看存在此问题的负载均衡器日志时,不知何故,大多数记录的用户代理都是移动设备上的 Opera,在带有 VPN 的桌面 Opera 中成功连接,但有时会失败。
关于javascript - WebSockets 与 Opera VPN 断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165186/