Websocket возвращает 200 вместо 101 от Apache Server - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь перенаправить трафик с Apache на Tomcat на сервере CentOs с помощью модулей mod_proxy и mod_proxy_wstunnel.HTTP-трафик перенаправляется без проблем, но я не могу успешно перенаправить трафик websocket с какой-либо конфигурацией, которую я пробовал до сих пор.Он дает мне код ответа 200 вместо 101.

Я прочитал много похожих вопросов, но пока не нашел решения.У них есть похожие проблемы. Вопрос 1 , Вопрос 2

Я использую Apache Server 2.4.6 -> Apache Tomcat 7.0.92 -> Java-приложение с реализацией сокетов Spring и javax.

Вот мои модули:

enter image description here

Вот мой httpd config:

<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, но не на удаленной.

This is remote CentOs machine. It gives 200.

Почемуя получаю 200 ответ?Что не так с этим конфигом?

Я перепробовал много реализаций, но все равно получил 200 откликов от сервера вместо обновления до 101.

1 Ответ

0 голосов
/ 06 февраля 2019

В конце концов, я сделал это.

В моем случае нет необходимости устанавливать RewriteConds и RewriteRules.Все, что нужно, - это прокси-запрос к текущему бэкэнду (Apache Tomcat), добавив в httpd.conf

 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...