Подтвердить что ты не робот

Nginx 1.2.0 - socket.io - HTTP/1.1 - Подключение через прокси-сервер

Я хотел бы заменить мой модуль node -http-proxy модулем nginx proxy_pass. Возможно ли с новой выпущенной версией nginx, как я прочитал, она поддерживает HTTP/1.1 из коробки. Я видел, как некоторые потоки боролись с этой проблемой, что веб-порты не поддерживаются nginx.

В моем случае я запускаю несколько проектов node в фоновом режиме и хочу маршрутизировать мои подключения к сети с порта 80 до 8000-8100, в зависимости от домена. Есть ли собственный способ прокси-сервера/обратного прокси-сервера websocket без использования аддона tcp_module?

Я попытался настроить вверх по потоку в nginx.conf с proxy_passing к нему, но если я попытаюсь подключиться к порту 80 через websocket, я получаю ошибку шлюза 502.

Кто-нибудь сталкивается с той же проблемой? У кого-нибудь есть рабочий пример для nginx + spcket.io, проксирование через порт 80?

4b9b3361

Ответ 1

Нет, это еще не возможно; nginx 1.2 включает материал из ветки разработки 1.1.x, которая действительно включает обратное прокси HTTP/1.1. Соединения в Websocket устанавливаются с использованием заголовка HTTP/1.1 "Upgrade", но тот факт, что nginx теперь поддерживает этот тип заголовков, не означает, что он поддерживает websockets (websockets - это другой протокол, а не HTTP). (Я сам это пробовал, используя ветку 1.1.x(которая, как мне показалось, была достаточно стабильной для моей цели), и она не работает без tcp_module)

Websockets, вероятно, будет поддерживаться в версии 1.3.x(http://trac.nginx.org/nginx/roadmap).

Ваши альтернативы:

  • используйте node -http-proxy
  • использовать nginx без модуля tcp; socket.io не будет использовать веб-узлы, но что-то еще (например, длительный опрос)
  • nginx с модулем tcp: в этом случае я думаю, вам нужен дополнительный порт для этого модуля (никогда не пробовал это сам)
  • поставьте что-то еще впереди как обратный прокси-сервер: я использую HAProxy (который поддерживает веб-узлы) перед nginx и node. Nginx теперь просто действует как статический файловый сервер, а не прокси. Лак - еще один вариант, если вы хотите дополнительное кэширование.

Ответ 2

В отношении NginX с модулем TCP есть несколько проблем, с которыми я столкнулся. Но самым сложным является попытка запустить ваши веб-сайты с nginx на порту 80 на экземпляре EC2.

Я описал целую конфигурацию здесь