Websocket返回200(而不是Apache Server的101)

时间:2019-02-05 15:44:46

标签: java spring apache tomcat websocket

我试图通过使用mod_proxy和mod_proxy_wstunnel模块将流量从Apache重定向到CentOs服务器上的Tomcat。 HTTP流量可以顺利重定向,但是到目前为止,我无法使用任何配置成功重定向Websocket流量。它给了我200个响应代码,而不是101个。

我已经阅读了许多类似的问题,但尚未找到任何解决方案。这些有类似的问题。 Question 1Question 2

我正在使用Apache Server 2.4.6-> Apache Tomcat 7.0.92->具有Spring和javax套接字实现的Java应用程序。

这是我的模块:

enter image description here

这是我的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,但不在远程。

This is remote CentOs machine. It gives 200.

为什么我会收到200条回复? 这个配置有什么问题?

我尝试了很多实现,但是服务器仍然有200个响应,而不是升级到101。

1 个答案:

答案 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