我有一个 Apache/2.4.6 安装,用作某些应用程序的反向代理。现在我必须配置另一个。HTTP 代理运行良好,但在网页的某些部分,客户端会尝试启动 websocket 连接。
问题是 URL 被部分共享:
HTTP 请求:http://domain/context/[whatever]
WS 请求:ws://domain/context/specific-text?param1¶m2
无法使用If
(检查协议),因为 ProxyPass 无法进入<If>
。
尝试的设置:
<Location /context/specific-text>
ProxyPass ws://internal.domain/context/specific-text
前
<Location /context/>
ProxyPass http://internal.domain/context/
但它不起作用,猜测是因为(不存在的)尾随斜杠。
更多数据:
- 套接字抱怨不喜欢“200”代码,Apache 没有返回 ws 连接,但在某种程度上,正在进行代理。
- 尝试过有或没有
<Location>
- 想过重写
specific-text
,specific-text/
但我不喜欢操纵我无法管理的东西。该应用程序是付费产品,不能问它是否会造成任何损害。好吧,我可以,但我不会期待任何答案。
答案1
对我有用的是这个 ProxyPass 配置片段:
ProxyPass /specific wss://0.0.0.0:4000/specific
ProxyPassReverse /specific wss://0.0.0.0:4000/specific
ProxyPass / https://0.0.0.0:4000/
ProxyPassReverse / https://0.0.0.0:4000/
这文档说:
订购 ProxyPass 指令
按照配置的顺序检查已配置的 ProxyPass 和 ProxyPassMatch 规则。第一个匹配的规则获胜。