javascript - WebSockets 与 Opera VPN 断开连接

标签 javascript node.js apache websocket opera

我有一个基于 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/

相关文章:

node.js - 如何在 mean.io 中使用 MongoDB

javascript - Heroku 无法运行 Node ES6 代码

TheGamesDB.net 的 apache url 重写

apache - 只有登陆页面加载 HTTPS 我得到的所有其他页面在此服务器上找不到请求的 URL

javascript - Meteor js,React 自定义图像重定向/meteor WebApp

javascript - 如何使用 initSelection 附加 jquery select2 值

node.js - 在 Node.js 中生成和验证密码哈希值与 Python 的 werkzeug 相同

php - Ubuntu Lamp - 代理 - 防火墙 - Joomla curl 和 fsockopen 无法工作

javascript - OpenLayers 从 map 中删除图层

javascript - 错误的 Instagram Feed 错误