0

我的安装程序已经在我的虚拟主机中使用这两行通过 TCP 工作:

ProxyPassMatch ^/ws/.*$ ws://localhost:8000/
ProxyPass / http://localhost:8000/

现在我想使用 unix 套接字。所以我在前面加上unix:$SOCKETPATH|并删除了端口:

ProxyPassMatch ^/ws/.*$ unix:/run/myapp.sock|ws://localhost/
ProxyPass / unix:/run/myapp.sock|http://localhost/

它适用于 HTTP,但 websocket 连接失败。我尝试了 websockets 行右侧的变体,例如:

ProxyPassMatch ^/ws/.*$ unix:/run/myapp.sock|ws:///
ProxyPassMatch ^/ws/.*$ unix:/run/myapp.sock|ws://

除了让它工作之外,我想了解为什么在管道 (|) 之后仍然需要部分?毕竟,Apache 应该只需要知道 unix 套接字路径,不是吗?ProxyPass上的Apache 文档没有解释这一点。

这些类似的问题没有帮助:

4

1 回答 1

0

我将 Debian Apache 数据包从 2.4.38-3+deb10u4 (stable) 升级到 2.4.46-4~bpo10+1 (backports),现在它可以工作了。Apache 更改日志提到了对 websockets 的多项更改。我想这种变化可能是问题所在:

mod_proxy_wstunnel: Leave Upgrade requests handling to mod_proxy_http,
allowing for (non-)Upgrade negotiation with the origin server.
于 2021-06-23T17:26:22.487 回答