Зачем использовать nginx с Catalyst/Plack / Starman?

Я пытаюсь развернуть свое маленькое веб-приложение Catalyst с помощью Plack / Starman. Вся документация, похоже, предполагает, что я хочу использовать это в сочетании с nginx. Каковы преимущества этого? Почему бы не использовать Starman прямо на порту 80?

3 ответов


Это не должно быть nginx в частности, но вы хотите, чтобы какой-то сервер интерфейса проксировался на ваш сервер приложений по нескольким причинам:

  1. таким образом, Вы можете запустить сервер Catalyst на высоком порту, как обычный пользователь, при запуске сервера frontend на порту 80.

  2. для обслуживания статических файлов (обычные ресурсы, такие как изображения, JS и CSS, а также любые загрузки, которые вы можете использовать X-Sendfile или X-Accel-Redirect с) без привязки процесса perl на время загрузки.

  3. Это делает вещи проще, если вы хотите перейти к более сложной конфигурации с участием, например, Edge Side включает, или веб-сервер служит непосредственно из memcached или mogilefs (обе вещи, которые nginx может сделать), или конфигурации балансировки нагрузки / HA.


Я задал этот вопрос на #plack и получил следующий ответ от @nothingmuch (я добавил форматирование):

с nginx вы можете настроить материал типа loadbalancing/failover. Если сайт маленький/простой это может быть перебор.

Я не знаю ни одного недостатки Starman могли бы иметь. Возможно, если у вас много хитов статические файлы nginx будет использовать менее cpu / память для их обработки, но это вряд ли будут существенными в типичный интернет приложение. Большие загрузки могут свяжите работников Starman для статического файла и все же ... (Возможно, нет, с функция sendfile.) Это все, что я могу думать о.

...Установка отработки отказа может если вы хотите сделать модернизацию без простоя. ("Провал" старого версия.)


еще одна причина заключается в том, что легкий интерфейсный сервер (даже Apache в порядке) потребляет гораздо меньше памяти на соединение, чем типичный процесс Starman (пара МБ против десятков или более 100 МБ). Поскольку соединение открыто в течение некоторого времени, особенно если вы хотите использовать keep-alive соединения, вы можете поддерживать большое количество одновременных соединений с гораздо меньшим количеством ОЗУ. Только убедитесь, что размер буфера прокси-сервера достаточно велик, чтобы загрузить типичный HTTP-ответ сразу с заднего двора. Затем бэкэнд может обработать следующий запрос.