Давайте прагматичный подход.
Все эти ограничения - вещи, которые были жестко запрограммированы и разработаны в прошлом веке, когда оборудование было медленным и дорогим. Сейчас мы находимся в 2016 году, тостер среднего размера может обрабатывать больше запросов, чем значения по умолчанию.
Настройки по умолчанию на самом деле опасны. Наличие сотен пользователей на сайте не впечатляет.
worker_process
Связанная настройка, давайте объясним это, пока мы находимся на теме.
nginx как балансировщик нагрузки:
- 1 рабочий для балансировки нагрузки HTTP.
- 1 рабочий на ядро для балансировки нагрузки HTTPS.
nginx как веб-серверы:
Этот хитрый.
Некоторые приложения / frameworks / middleware (например, php-fpm) запускаются за пределами nginx. В этом случае достаточно одного работника nginx, потому что обычно внешнее приложение выполняет тяжелую обработку и использует ресурсы.
Кроме того, некоторые приложения / платформы / промежуточное программное обеспечение могут обрабатывать только один запрос за раз, и это приводит к обратным последствиям для их перегрузки.
Вообще говоря, 1 работник всегда безопасная ставка.
В противном случае вы можете поставить одного работника на ядро, если знаете, что делаете. Я бы посчитал этот маршрут оптимизацией и посоветовал бы правильно провести бенчмаркинг и тестирование.
worker_connections
Общее количество подключений составляет worker_process * worker_connections
. Половина в режиме балансировки нагрузки.
Теперь мы подходим к тостеру. Есть много серьезно недооцененных системных ограничений:
- Максимальное количество открытых файлов на процесс в Linux составляет 1 КБ (1 КБ, 4 КБ в некоторых дистрибутивах).
- Системные ограничения примерно такие же, как и улимитов.
- По умолчанию nginx составляет 512 соединений на одного работника.
- Там может быть больше: SELinux, sysctl, supervisord (каждая версия distro + немного отличается)
1k worker_connections
Безопасное значение по умолчанию - 1k везде.
Это достаточно высоко, чтобы быть больше, чем большинство внутренних и неизвестных сайтов когда-либо сталкиваются. Это достаточно низко, чтобы не нарушать другие системные ограничения.
10 тыс. Рабочих_соединений
Распространено тысячи клиентов, особенно для публичного сайта. Я перестал считать количество сайтов, которые я видел, из-за низких значений по умолчанию.
Минимально приемлемый для производства 10к. Соответствующие системные ограничения должны быть увеличены, чтобы это было возможно.
Не существует такой вещи, как слишком высокий лимит (лимит просто не действует, если нет пользователей). Однако слишком низкий лимит - это очень реальная вещь, которая приводит к отклонению пользователей и мертвому сайту.
Более 10к
10к это красиво и легко.
Мы могли бы установить произвольные ограничения в 1000kk (это всего лишь предел), но это не имеет особого практического смысла, мы никогда не получаем этот трафик и не можем его взять.
Давайте придерживаться 10k в качестве разумной настройки. Сервисы, которые собираются (и могут сделать) больше, потребуют специальной настройки и сравнительного анализа.
Специальный сценарий: расширенное использование
Иногда мы знаем, что на сервере не так много ресурсов, и мы ожидаем всплески, с которыми мы ничего не можем поделать. Мы скорее откажемся от пользователей, чем попробуем. В этом случае установите разумный лимит соединения и настройте хорошие сообщения об ошибках и обработку.
Иногда бэкэнд-серверы работают хорошо и хорошо, но только до некоторой нагрузки , чего угодно, и все быстро движется на юг. Мы бы предпочли замедлиться, чем дать сбой серверам. В этом случае настройте организацию очереди со строгими ограничениями, пусть nginx буферизирует всю высокую температуру, пока запросы расходуются в ограниченном темпе.