TLDR: Проксирование socket.io с Apache приводит к этой ошибке клиента: main-es2015.a5a3463e1d800651eb18.js:1 WebSocket connection to 'wss://www.company.com/nodeapp/socket.io/?EIO=3&transport=websocket&sid=cqYNnGKUb-BhjA0dAAAH' failed: Error during WebSocket handshake: Unexpected response code: 400
Я проксирую сервер узла, используя Apache, и приложение узла действует в качестве API и сервера socket.io. Я должен прокси, потому что наш домен (притворяется, что он www.company.com) указывает на настройку apache, и мне нужно www.company.com/nodeapp для доступа к серверу узлов в качестве отдельного сайта.
Проксирование API в порядке со следующим:
RewriteRule ^/nodeapp$ /nodeapp/ [R]
<Location /nodeapp/>
ProxyPass http://localhost:3021/
ProxyPassReverse http://localhost:3021/
</Location>
Таким образом, сервер узла, как и socket.io, не работает https
, а просто http
.
Мой сбойный прокси для socket.io:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/nodeapp /socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3021/$1 [P,L]
ProxyPass /nodeapp /socket.io http://localhost:3021/socket.io
ProxyPassReverse /nodeapp /socket.io http://localhost:3021/socket.io
В моем приложении узла я получаю соединение от клиента (я вижу это в обратном вызове connection
), но ошибка выше это все, с чем меня приветствуют на клиенте, и я уверен, что это связано с моей конфигурацией прокси. Что я пропускаю / делаю неправильно?