Назад | Перейти на главную страницу

Nginx + SSL + Rails + Juggernaut (Node.js) + Engineyard

У меня есть два разных приложения на одном сервере. Один из них работает на порту 80 (mydomain.com), другой - на порту 443 (sub.mydomain.com) и имеет сертификат подстановки.

Первое приложение предназначено только для информационных целей и не требует поддержки веб-сокетов. Второе приложение должно иметь поддержку безопасных веб-сокетов (протокол wss).

Я пытался настроить juggernaut gem (для веб-сокетов) для моего приложения rails с сервером nginx в облаке Engineyard, но у меня возникла одна проблема. Облако Engineyard предоставляет только два открытых порта: 80 и 443. Я знаю, что nginx не полностью поддерживает обратное проксирование http 1.1, поэтому я не могу использовать проксирование от nginx для перенаправления запросов веб-сокетов на конкретный локальный порт (в моем случае это порт 8080).

Я пробовал использовать HAProxy, и у меня это работает, когда я использую только незащищенные веб-узлы, но мне нужно поддерживать безопасные веб-узлы. Как я знаю, в этом случае я должен использовать что-то вроде STunnel для туннелирования моего https-запроса, а затем использовать HAProxy, но когда я его тестировал - я увидел, что сервер должен работать в несколько раз медленнее, и я все еще не работал, чтобы использовать безопасный сокет соединение :(

Может я что то не так делаю? Может быть, кто-нибудь подскажет, как настроить nginx для нескольких приложений (одно из них должно работать через https) и защищать веб-сокеты, используя только два порта (80 и 443).

p.s. Также я использовал node-http-proxy, в этом случае я смог настроить прокси для разных приложений nginx, но я не запускал веб-сокеты (это произошло только для «рукопожатия» через nginx, а не для «переключения протоколов»)

Обычный обратный прокси не работает для подключений через веб-сокеты. Существует патч для Nginx, который добавляет функцию прокси TCP, совместимую с веб-сокетами.

Хорошая статья о комбинации здесь: http://blog.mixu.net/2011/08/13/nginx-websockets-ssl-and-socket-io-deployment/