У кого-нибудь получилось проксировать Socket.io через nginx?

В своей «Разрабатываемой версии» nginx заявляют поддержку проксирования HTTP 1.1. Что должно позволить использование вебсокетов через nginx-овую инструкцию proxy_pass.

В интернете нашёл несколько схожих описаний конфигов. Например, здесь: nabeelio.com/2012/01/node-js-and-nginx/ и здесь gist.github.com/1542161

Однако, сделать так, чтобы заработали Websocket-ы в Socket.io у меня так и не вышло. Кому-нибудь это удалось?

Версия nginx, с которой провожу эксперименты — 1.1.18.

UPDATE: решение найдено через год :) habrahabr.ru/post/171757/
  • Вопрос задан
  • 7249 просмотров
Пригласить эксперта
Ответы на вопрос 4
VBart
@VBart
«Что должно позволить использование вебсокетов через nginx-овую инструкцию proxy_pass.»
Это ошибочное предположение.
Ответ написан
yurtaev
@yurtaev
Я завел при помощи github.com/yaoweibin/nginx_tcp_proxy_module но в продакшен я бы пока не рискнул
Ответ написан
Не совсем ответ на ваш впрос, но, возможно, у вас ситуация аналогична моей, и тогда подобный подход поможет.

Столкнулся с этим буквально два дня назад, только не с socket.io, а с faye(http://faye.jcoglan.com), что в принципе те же яйца.

Нужно было прокидывать websocket запросы с определённого урла основного домена и 80 порта на порт асинхронного сервера на том же домене.

Решения с nginx, устроившего меня, я так и не нашел(варианты в коментах выше рассматривал), но в итоге понял, что подхожу не стой стороны к проблеме.
Проблема заключалась в том, что т.к. кроссдоменные faye-транспорты работают не во всех броузерах корректно, то начал я слать faye запросы на основной домен, и там на уровне nginx разделять траффик по веб-серверам (тут-то вебсокеты и не прокидывались).
И в итоге осознал, что надо просто вебсокет соединения открывать по отдельному адресу напрямую в асинхронный веб-сервер, а всё остальное оставить как есть — слать на 80й порт основоного домена nginx'у.
github.com/faye/faye/pull/134
Ответ написан
Aleks_ja
@Aleks_ja Автор вопроса
Хочется обойтись без HAProxy, а порт 80 нужен на тот случай, если будет заблокирован нестандартный порт. Как это теперь лично я обхожу — писал выше.

Если есть способ как на одном сервере для разных хостов иметь одинаковый внешний айпишник (либо для разных хостов и разных айпишников, но опять же на одном сервере) для сервера на Убунте — хоть направление скажите, куда копать :) Это будет по-лучше решение, чем проверка заблокированности порта и скатывания на лонг поллинг если порт заблокирован.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы