我试图通过使用mod_proxy和mod_proxy_wstunnel模块将流量从Apache重定向到CentOs服务器上的Tomcat。 HTTP流量可以顺利重定向,但是到目前为止,我无法使用任何配置成功重定向Websocket流量。它给了我200个响应代码,而不是101个。
我已经阅读了许多类似的问题,但尚未找到任何解决方案。这些有类似的问题。 Question 1,Question 2
我正在使用Apache Server 2.4.6-> Apache Tomcat 7.0.92->具有Spring和javax套接字实现的Java应用程序。
这是我的模块:
这是我的httpd配置:
<VirtualHost *:80>
ServerName domain.com
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"$
CustomLog /var/log/httpd/log_access.log combined
ErrorLog /var/log/httpd/log_error.log
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
RewriteEngine On
#RewriteCond %{HTTP:Connection} Upgrade [NC]
#RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /app-api/chat/user/(.*) ws://127.0.0.1:8080/app-api/chat/user/$1 [P,L]
ProxyPass /app-api http://127.0.0.1:8080/ retry=1 acquire=3000
ProxyPassReverse /app-api http://127.0.0.1:8080/
DocumentRoot /var/www/html
如果我直接在本地计算机上使用connect to Apache Tomcat-一切都很好,它将返回101,但不在远程。
为什么我会收到200条回复? 这个配置有什么问题?
我尝试了很多实现,但是服务器仍然有200个响应,而不是升级到101。
答案 0 :(得分:0)
最后,我完成了。
就我而言,不需要放置RewriteConds和RewriteRules。 所需要的只是通过添加到httpd.conf
中将请求代理到实际后端(Apache Tomcat)。 ProxyPass /api/chat/user/ ws://127.0.0.1:8080/chat/user/
ProxyPassReverse /api/chat/user/ ws://127.0.0.1:8080/chat/user/
还必须启用mod_proxy_wstunnel。
仅从官方文档获得此配置。 以防万一:mod_proxy_wstunnel