Я пытаюсь развернуть проект узла js socket.io из официального образца на моем сервере (Ubuntu с сервером Apache 2)
Это моя настройка прокси-сервера в /etc/apache2/sites-available/000-default.conf
ProxyPass /ChatSocket http://localhost:3000
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPass /socket.io ws://localhost:3000/socket.io
Но когда я пытаюсь получить доступ к своему веб-серверу через dns, я не могу подключиться к сокету.
Я получил эту ошибку в консоли браузера
WebSocket connection to 'ws://example.com/socket.io/?EIO=3&transport=websocket&sid=HgU6py-fCl1GFrdsAAAK' failed: Error during WebSocket handshake: Unexpected response code: 400
Возможно, потому что URL-адрес http://example.com/socket.io противоречит ws://example.com/socket.io
Как я могу использовать websocket и http с тем же URL-адресом? Потому что кажется, что http://example.com/socket.io и ws://example.com/socket.io генерируется socket.io из этой строки
var server = require('http').createServer(app);
var io = require('socket.io')(server);
Есть ли другой способ обхода, чтобы исправить это, или развертывание моего приложения jQuery socket.io на моем сервере apache без proxypass?
Nevermind, мне удается заставить его работать с RewriteEngine
для веб-сокета (ws://
)
Это мой 000-default.conf
в /etc/apache2/sites-available
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/%1 [P,L]
ProxyPass /ChatSocket http://localhost:3000
ProxyPassReverse /ChatSocket http://localhost:3000
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPassReverse /socket.io http://localhost:3000/socket.io