Протокол ws и конфигурация apache mod_proxy_wstunnel: ошибка 500

Я получил ошибку 500 при попытке доступа к ws: // localhost: 8080 / через мой сервер Apache2. Этот сервер работает под управлением OpenSuse Leap 42.1 и Apache 2.4.16.

Эти модули Apache2 включены: mod_proxy, mod_proxy_http, mod_proxy_wstunnel.

Когда запрос вызывается из локальной сети, все работает нормально. Пример URL: http: // / api / ws / . Он возвращает статус 101 и ответ: Обновление: веб-сокет . Все в порядке.

Такой же запрос из внешней сети не выполняется. Пример URL: ws: // www. mysite.com/api/ws/ . Он возвращает ошибку 500.

Журнал доступа Apache содержит: GET / api / ws / HTTP / 1.1 "500 ...

Журнал ошибок Apache содержит: [прокси : warn] AH01144: Обработчик протокола не был действителен для URL / api / ws / . Если вы используете DSO-версию mod_proxy, убедитесь, что подмодули прокси включены в конфигурацию с помощью LoadModule.

Мой httpd.conf:

<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/api/ws/(.*)           [NC]
RewriteCond %{QUERY_STRING} transport=websocket     [NC]
RewriteRule /(.*)           ws://localhost:8080/$1  [P,L]
# Proxy pass
ProxyPass           /api/ws/            ws://localhost:8080/api/ws/
ProxyPassReverse    /api/ws/            ws://localhost:8080/api/ws/
# DocumentRoot
DocumentRoot /srv/www/vhosts/mysite.com
<Directory "/srv/www/vhosts/mysite.com">
    Options Indexes SymLinksIfOwnerMatch
    AllowOverride None
    ...
</Directory>
# URL as parameter
AllowEncodedSlashes NoDecode

Я следил за этими предыдущими ответами (спасибо): websockets , node.js , socket-io , но без удачи.

Что-то должно быть не так в моей конфигурации. Есть идеи?

5
задан 23 May 2017 в 14:33
1 ответ

Похоже, вам не хватает модуля mod_proxy_wstunnel, который необходим для поддержки Websockets.

Он должен быть включен, как показано ниже в вашем httpd.conf

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Установите модуль, и тогда он будет работать нормально.

.
1
ответ дан 3 December 2019 в 02:02

Теги

Похожие вопросы