在 Apache HTTP Server 中,比较常见的 WebSocket 反向代理配置应该是在 mod_proxy_wstunnel
的说明 中提到的这种:
1 | ProxyPass / http://example.com:9080/ |
一些看不懂的方括号让 mod_rewrite
完成了条件匹配和代理行为。
我应该从来没有想过弄懂它是什么意思,至少能跑就行。
注意到 mod_proxy_wstunnel
模块被标记了弃用,现在可以使用 Apache HTTP Server 2.4.47 或者更高版本,按照 mod_proxy
的示例 来配置:
1 | ProxyPass "/some/ws/capable/path/" "http://example.com/some/ws/capable/path/" upgrade=websocket |
一条配置解决之前需要 n 条配置的事情,十分优雅。
常与 ProxyPass
一起使用的命令还有 ProxyPassReverse
,在 Reverse Proxy Guide 提到它可以对 Location:
Header 进行修改,这样就不会在重定向时被带到源服务器的地址。
如果没有重定向,或者 Web 应用正确配置了 Base URL ,大概也可以不加?或者就顺手加一个上去,又不会吃亏?
我之前也从未打算去查资料,也从不关心多出来的这一条配置有什么作用。
此外,我还从之前的配置文件中看到了这样的写法:
1 | ProxyPass / ws://localhost:6666/ |
DeepSeek 告诉我,这样可能会造成路径冲突,导致无法正常使用。但是在我的环境中,WebSocket 和 HTTP 又都能正常建立连接。我还真不清楚这里发生了什么,甚至忘记了当时为什么会这么写。
(我和我的程序有一个)能跑就行,但不推荐各位使用。