我们正在尝试在我们的网站上展示来自远程设备的支持 WebSocket 的界面。
我已经在 Apache 中配置了 WebSocket 隧道,但在 Firefox 中收到“400 代理错误”(在 Chrome 中:“Websocket 连接到...失败”),并且 WebSocket 升级失败(升级请求从未到达远程设备)。Firefox 使用的是 wss://,而代理将使用远程主机上不安全的 ws:// 方案。
Apache 代理配置是:
<Location /ws/>
ProxyPass http://10.1.2.3/
ProxyPassReverse /
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule (.*) ws://$1 [P]
</Location>
Apache 错误日志显示代理已到达正确的端点,并给出“OK”状态:
[rewrite:trace1] mod_rewrite.c(483): [perdir /ws/] pass through proxy:http://10.1.2.3/socket.io/1/?t=1619199242068
[rewrite:trace1] mod_rewrite.c(483): [perdir /ws/] go-ahead with proxy request proxy:ws://proxy:http://10.1.2.3/socket.io/1/websocket/Ecr8KsStUznLLly3Av_f [OK]
我如何才能获得有关此故障原因的更多信息,或者如何修复它?
答案1
我无法解决 Apache 的问题,因此我转而使用 SSL 终止来处理 haproxy 前端的代理,这样就成功了。