Nginx vs node -http-proxy

Скажите, пожалуйста, что предпочтительнее использовать для развертывания приложений nodejs nginx или node -http-proxy. Что является наиболее надежным?

Основные функции, которые мне нужны:

  • прокси все запросы на сообщение не 80
  • балансировка нагрузки
  • Поддержка Websocket

Ответ 1

Вот отличная статья по теме http://www.exratione.com/2012/07/proxying-websocket-traffic-for-nodejs-the-present-state-of-play/

Лично я играл с большим количеством конфигураций в этой области, и все сводится к тому, что вам нужно, и где вам нужно развернуть. Если вы находитесь на своем собственном оборудовании (или облачном срезе и т.д.), И вам нужно только поддерживать Node, тогда node -http-proxy на порту 80 очень мощный, надежный и позволяет использовать технологии, такие как websockets и ssl с небольшой головной болью.

Однако, если у вас есть другие сайты, которые вам нужно поддерживать, скажем, сайт Drupal или Grails, перед Nginx на 80 это более стандартная практика. С учетом этого нет причин, по которым Nginx не может подключиться к порту 8080 с node -http-proxy на 80 и прокси-трафике в соответствии с необходимым языком CGI. Это моя предпочтительная конфигурация и то, что я сейчас запускаю на производстве. До сих пор я очень доволен. Его быстрый, надежный, и я все еще могу поддерживать своих клиентов в создании сайтов в RapidWeaver рядом со своими собственными приложениями nodejs, использующими websockets и ssl.

Oh и балансировка нагрузки с помощью node -http-proxy - это кусок торта... проверьте этот простой пример Round-Robin https://github.com/nodejitsu/node-http-proxy/blob/master/examples/balancer/simple-balancer.js

Edit:

Я обнаружил, что запуск node -http-proxy на порту 80 - это плохая практика, потому что для пользователя root требуется выполнить node. Вместо этого используйте IP-таблицы для перенаправления порта 80 в не-привилегированный порт, где выполняется ваш node -http-proxy. Еще лучше настроить лак на 80 (потому что, как говорится в статье, у любого серьезного веб-приложения должен быть HTTP-ускоритель перед ним) и перенаправляет запросы на node -http-proxy на непривилегированный порт. Отсюда, как вы хотите разделить трафик между серверами node и nginx.

Второе редактирование:

Nginx теперь поддерживает websockets! И хотя текущее состояние node вполне способно доставить полный стек, это не значит, что он должен. Я имею в виду, что технически вы могли бы использовать ручку отвертки, чтобы вбить гвоздь в стену... но почему бы вам, если у вас есть молоток, сидящий прямо здесь? От обслуживания статики до комплексной балансировки нагрузки Nginx тестируется и развертывается в некоторых из самых передовых сетей. Теперь нет необходимости в поддержке websocket.

Ответ 2

Я был вынужден использовать node -http-proxy в производстве из-за того, что мы должны обойти Китайскую интернет-стену, ИМХО, она довольно надежная, гибкая.

В последнее время я планирую использовать его больше в других областях, поэтому я google и получаю следующий тест на

https://github.com/observing/balancerbattle

На основе теста кажется, что node -http-proxy самый медленный. Тем не менее, я думаю, что разница в производительности немного, и это также доказывает, что node -http-proxy тоже надежный. При использовании node -http-proxy я могу просто использовать nodejs и создавать среду с несколькими пакетами (мы используем FreeBSD, и мне не нравится создавать много пакетов, которые нам никогда не нужны.)

При использовании node -http-proxy вы пишете свой собственный прокси-сервер, так что вы можете настроить логику как можно больше. Нет необходимости использовать nginx или haproxy для этой крошечной лучшей производительности.