【问题标题】:Websocket returns 200 instead of 101 by Apache ServerWebsocket 由 Apache 服务器返回 200 而不是 101
【发布时间】:2019-06-29 11:44:01
【问题描述】:

我正在尝试使用 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

如果我直接在本地机器上使用连接到 Apache Tomcat - 一切都很好,它返回 101,但不是在远程机器上。

为什么我收到 200 个响应? 这个配置有什么问题?

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

【问题讨论】:

    标签: java spring apache tomcat websocket


    【解决方案1】:

    终于,我做到了。

    在我的情况下,不需要放置 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

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 2020-08-27
      • 2021-06-18
      • 1970-01-01
      • 2013-06-11
      • 2016-09-29
      • 2018-06-28
      • 2017-10-26
      相关资源
      最近更新 更多