Перенаправление трафика веб-сокета на порт 80 с помощью lighttpd
У меня есть сайт, размещенный на lighttpd, доступный на поддомене www. У меня также есть чат-сервер, прослушивающий порт 8124, с помощью node.js и socket.io.
Я хочу, чтобы весь трафик клиента проходил через порт 80, перенаправляя все запросы на поддомен chat в порт 8124. Поэтому я включил mod_proxy и в lighttpd.conf добавил:
$HTTP["host"] == "chat.myserver.com" {
proxy.server = (
"" => ((
"host" => "78.128.79.192",
"port" => "8124"
))
)
}
На клиенте, когда я подключаюсь к веб-сокету,
var socket = io.connect('http://chat.myserver.com');
Я получаю правильные сообщения от node.js:
debug - client authorized
info - handshake authorized 6067470561567883577
debug - setting request GET /socket.io/1/websocket/6067470561567883577
debug - set heartbeat interval for client 6067470561567883577
debug - client authorized for
debug - websocket writing 1::
Но браузер выдает ошибку:
Firefox can't connect to server ws://chat.myserver.com/socket.io/1/websocket/6067470561567883577
Конечно, все работает правильно, если я подключаюсь напрямую к порту 8124:
var socket = io.connect('http://www.myserver.com:8124');
Но, как я уже сказал, я бы хотел, чтобы весь клиентский трафик проходил через порт 80. Возможно ли это?
1 ответ
Известно, что mod_proxy не совместим с веб-сокетами.
HAProxy совместим (я сам не проверял, но вот статья о его конфигурации для веб-сокетов).