Apache WebSockets“400 代理错误”

Apache WebSockets“400 代理错误”

我们正在尝试在我们的网站上展示来自远程设备的支持 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 前端的代理,这样就成功了。

相关内容