Как настроить Apache для прокси-сервера socket.io - PullRequest
0 голосов
/ 30 марта 2019

У меня работает веб-приложение на http://example.com:5000/

Веб-сайт пытается установить соединение socket.io с этим сервером для обмена данными, критичными ко времени (многопользовательская игра).

Пока все отлично работает ...

Теперь я пытаюсь подготовить все это к производству, поэтому хочу сделать его доступным по более приятному URL: https://myapp.example.com/

Для этого я настраиваю свой сервер Apache следующим образом:

ProxyPass / http://0.0.0.0:5000/
ProxyPassReverse / http://0.0.0.0:5000/

На первый взгляд все работает, но socket.io больше не может переключаться с опроса на веб-сокет.

Консоль Javascript показывает эту ошибку:

socket.io.js:8 WebSocket connection to 'wss://myadpp.example.com/socket.io/?EIO=3&transport=websocket&sid=0bef58d5622f4d20b4c1d7f29c97a21d' failed: Error during WebSocket handshake: Unexpected response code: 200

Кажется, это очень распространенная установка - скрытие веб-приложения на основе socket.io за прокси-сервером apache - но я не могу найти какие-либо рабочие решения в Интернете.

Кажется, что apache не может прокси-соединения ws: //, но я не знаю, что делать вместо этого ..

Нашел решение здесь: WebSockets и прокси-сервер Apache: как настроить mod_proxy_wstunnel?

1 Ответ

0 голосов
/ 30 марта 2019

Попробуйте загрузить модуль mod_proxy_wstunnel: https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

Edit:

Для вас второй вопрос попробуйте это:

RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://0.0.0.0:5000/$1 [P,L]

RewriteCond %{QUERY_STRING} transport=polling    [NC]
RewriteRule /(.*)           http://0.0.0.0:5000/$1 [P,L]

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