Apache proxyPassReverse и веб-сокеты

Я работаю над проектом Perl Mojolicious, в котором используются веб-сокеты. Я хочу запустить его на общем сервере под управлением apache и использовать proxyPass и proxyPassReverse, чтобы сделать URL-адрес более красивым для моего кода Mojolicious, работающего с Hypnotoad.

У меня настроено следующим образом.

URL-адрес апача:

mydomain.com

Адрес гипножабы:

mydomain.com:8080

С помощью следующей записи apache я могу изменить прокси-сервер Hypnotoad на

project.mydomain.com

запись в apache.conf

<VirtualHost *:80>
  ServerName project.mydomain.com
  DocumentRoot /var/www/project
  <Directory /var/www/project/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://mydomain.com:8080/ keepalive=On
  ProxyPassReverse / http://mydomain.com:8080/
  RequestHeader set X-Forwarded-HTTPS "0"
</VirtualHost>

Однако мои запросы веб-сокетов дают ошибку 404, когда я использую:

ws://project.mydomain.com/get-data

и ошибка 302, когда я использую:

ws://mydomain.com:8080/get-data

Я думаю, это не было бы проблемой, если веб-сокет не проверял аутентификацию, но они используют маршруты Mojolicious для проверки того, что вы можете публиковать сообщения через веб-сокет.

Из того, что я вижу, Apache не поддерживает обратное проксирование веб-сокетов. В файлах конфигурации apache/httpd.

Кто-нибудь нашел полезное решение для этого с использованием Apache, стабильного для производственной среды?


person user1439590    schedule 22.01.2013    source источник


Ответы (3)


В марте был выпущен патч. зафиксировано в стволе Apache Джимом Ягельски, что позволяет правильно проксировать веб-сокеты. Патч добавляет новый подмодуль proxy_wstunnel, который позволяет mod_proxy работать с протоколами "ws" и "wss".

Модуля еще нет ни в одном официальном выпуске Apache (по состоянию на 8 июня 2013 г.), поэтому вам нужно будет скомпилировать его самостоятельно. Блог Voyageur описывает процесс для Apache 2.2, но для Apache 2.4 он должен быть проще.

person rmeakins    schedule 08.06.2013

Apache httpd 2.4.6 включает проксирование запросов веб-сокетов.

person jimjag    schedule 08.08.2013
comment
Это больше подходит для комментария, а не для ответа. После того, как вы наберете достаточную репутацию, подумайте о том, чтобы переместить это в комментарий к вопросу. - person Sameer Singh; 08.08.2013
comment
@SameerSingh Я думаю, что это точно ответ на вопрос автора патча. - person iwein; 20.10.2014

Это может быть то, что вы ищете. Взгляните на: https://npmjs.org/package/npr

person Qian Chen    schedule 21.06.2013