У меня работает веб-приложение на 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?