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

Nginx и Perl: FastCGI против обратного прокси (PSGI/Starman)

Очень популярный выбор для работы веб-приложений Perl в наши дни, по-видимому, находится за прокси-серверами nginx для прокси-сервера либо для FastCGI-демона, либо для веб-сервера с поддержкой PSGI (например, Starman).

Было много вопросов относительно того, почему это можно сделать вообще (например, Зачем использовать nginx с Catalyst/Plack/Starman?) и ответы кажутся применимыми в обоих случаях (например, разрешить nginx обслуживать статический контент, простой перезапуск сервера приложений, балансировку нагрузки и т.д.).

Однако меня особенно интересуют плюсы и минусы использования FastCGI и обратного прокси-подхода. Похоже, что Starman широко считается самым быстрым и лучшим приложением Perl PSGI/веб-сервером, и я изо всех сил стараюсь увидеть все преимущества использования FastCGI. Оба подхода, похоже, поддерживают:

  • Сокеты домена UNIX, а также сокеты TCP
  • серверы стиля fork/process manager, а также неблокирующие серверы на основе событий (например, AnyEvent).
  • Обработка сигналов/изящный перезапуск.
  • PSGI

Аналогично, конфигурация nginx для любой опции очень похожа.

Итак, почему вы выбрали один из них?

4b9b3361

Ответ 1

Настройка обратного прокси-сервера (например, пересылка HTTP-запросов nginx в Starman) имеет следующие преимущества:

  • вещи немного легче отлаживать, поскольку вы можете легко удалять сервер бэкэнд,

  • если вам нужно масштабировать свой серверный сервер, вы можете легко использовать что-то вроде фунта /haproxy между HTTP-интерфейсом (статическим сервисом) и вашими бэкэндами (Zope часто развертывается таким образом);

  • он может быть приятным приятелем, если вы также используете какой-то внешний обратный, кеширующий, обратный прокси (например, Varnish или Squid), поскольку он позволяет легко обойти его.

Однако он имеет следующие недостатки:

  • сервер базы данных должен выяснить реальный IP-адрес, поскольку все, что он увидит, - это адрес сервера интерфейса (обычно локальный); есть почти простой способ узнать IP-адрес клиента в заголовках HTTP, но что-то дополнительное, чтобы выяснить,

  • сервер backend обычно не знает HTTP-заголовок orignal "Host:" и, следовательно, не может автоматически генерировать абсолютный URL-адрес для локального ресурса; Zope обращается к этому со специальными URL-адресами, чтобы вставлять исходный протокол, хост и порт в запрос к серверу, но это то, что вам не нужно делать с FastCGI/Plack/...;

  • интерфейс не может автоматически запускать бэкэнд-процессы, как, например, с FastCGI.

Выберите свои любимые плюсы и минусы и сделайте свой выбор, я думаю; -)

Ответ 2

HTTP хорошо понимается большинством системных администраторов и легко отлаживается. Там почти всегда есть какой-то обратный прокси-сервер, который уже развернут, поэтому кусок пирога просто добавляет еще одну конфигурационную строфу в свою конфигурацию, чтобы запустить приложение за несколько секунд. Никогда не проверял разницу в скорости с обоими настройками, но, с другой стороны, у меня никогда не было проблем в этой области, так что это не может быть так плохо.