12

我的网络套接字和我的反向代理 Apache 有问题,我已经升级到最新版本 2.4.5 并加载了模块mod_proxy_wstunnel

httpd.conf :

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.toto.fr
ServerAlias toto.fr


ProxyPass /my_app  http://1X.X.X.1:8080/my_app
ProxyPassReverse /web_pmr  http://1X.X.X.1:8080/my_app
ProxyPassReverseCookiePath /my_app /
ProxyPassReverseCookieDomain localhost my_app
ProxyRequests off
ProxyTimeout 15

#WEBSOCKETS


ProxyPass /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/my_app/BasicWebsocketServlet retry=0
ProxyPassReverse /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/web_pmr/BasicWebsocketServlet retry=0


ErrorLog "logs/my_app_error.log"
LogLevel debug
CustomLog "logs/my_app_access.log" combined
<Proxy *>
      Order deny,allow
      Allow from all
</Proxy>
</VirtualHost>

当我在本地 URL 中进行测试时,websockets 正在工作,但使用反向代理 Apache,Tomcat 日志中没有任何痕迹。

4

1 回答 1

22

这一行:

ProxyPass /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/my_app/BasicWebsocketServlet retry=0

需要在这个之前:

ProxyPass /my_app  http://1X.X.X.1:8080/my_app

说明(来自https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass):

订购 ProxyPass 指令

已配置的 ProxyPass 和 ProxyPassMatch 规则按照配置顺序进行检查。第一条匹配的规则获胜。所以通常你应该首先从最长的 URL 开始对冲突的 ProxyPass 规则进行排序。否则,用于较长 URL 的后续规则将被使用 URL 的前导子字符串的任何较早规则隐藏。请注意,与工人共享有一些关系。相反,只能将一个 ProxyPass 指令放置在 Location 块中,并且最具体的位置将优先。

出于同样的原因,排除必须出现在一般 ProxyPass 指令之前。

于 2013-08-25T22:39:36.160 回答