Зачем использовать nginx с Catalyst/Plack / Starman?
Я пытаюсь развернуть свое маленькое веб-приложение Catalyst с помощью Plack / Starman. Вся документация, похоже, предполагает, что я хочу использовать это в сочетании с nginx. Каковы преимущества этого? Почему бы не использовать Starman прямо на порту 80?
3 ответов
Это не должно быть nginx в частности, но вы хотите, чтобы какой-то сервер интерфейса проксировался на ваш сервер приложений по нескольким причинам:
таким образом, Вы можете запустить сервер Catalyst на высоком порту, как обычный пользователь, при запуске сервера frontend на порту 80.
для обслуживания статических файлов (обычные ресурсы, такие как изображения, JS и CSS, а также любые загрузки, которые вы можете использовать X-Sendfile или X-Accel-Redirect с) без привязки процесса perl на время загрузки.
Это делает вещи проще, если вы хотите перейти к более сложной конфигурации с участием, например, Edge Side включает, или веб-сервер служит непосредственно из memcached или mogilefs (обе вещи, которые nginx может сделать), или конфигурации балансировки нагрузки / HA.
Я задал этот вопрос на #plack и получил следующий ответ от @nothingmuch (я добавил форматирование):
с nginx вы можете настроить материал типа loadbalancing/failover. Если сайт маленький/простой это может быть перебор.
Я не знаю ни одного недостатки Starman могли бы иметь. Возможно, если у вас много хитов статические файлы nginx будет использовать менее cpu / память для их обработки, но это вряд ли будут существенными в типичный интернет приложение. Большие загрузки могут свяжите работников Starman для статического файла и все же ... (Возможно, нет, с функция sendfile.) Это все, что я могу думать о.
...Установка отработки отказа может если вы хотите сделать модернизацию без простоя. ("Провал" старого версия.)
еще одна причина заключается в том, что легкий интерфейсный сервер (даже Apache в порядке) потребляет гораздо меньше памяти на соединение, чем типичный процесс Starman (пара МБ против десятков или более 100 МБ). Поскольку соединение открыто в течение некоторого времени, особенно если вы хотите использовать keep-alive соединения, вы можете поддерживать большое количество одновременных соединений с гораздо меньшим количеством ОЗУ. Только убедитесь, что размер буфера прокси-сервера достаточно велик, чтобы загрузить типичный HTTP-ответ сразу с заднего двора. Затем бэкэнд может обработать следующий запрос.