Зачем использовать nginx с Catalyst / Plack / Starman? - PullRequest
23 голосов
/ 30 мая 2010

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

Ответы [ 3 ]

38 голосов
/ 30 мая 2010

В частности, это не обязательно должен быть nginx, но вам нужен прокси-сервер какого-то типа, который будет прокси-сервер к вашему серверу приложений по нескольким причинам:

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

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

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

9 голосов
/ 30 мая 2010

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

С помощью nginx вы можете настроить тип балансировки нагрузки / аварийного переключения. Если сайт маленький / простой может быть излишество.

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

... Настройка аварийного переключения может будь хорош, если хочешь делать апгрейды без простоев. ("Фэйл" старый версия.)

3 голосов
/ 21 октября 2014

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

...