Nginx: 12 настроек, которые спасут ваш прод
Nginx остаётся самым популярным веб-сервером в мире, но в дефолтной конфигурации он держит нагрузки в разы хуже, чем мог бы. За последние годы я собрал список настроек, которые стабильно дают эффект почти на любом проекте — от маленького лендинга до высоконагруженного API.
Начнём с самого частого узкого места — воркеров. По умолчанию worker_processes установлен в 1, что на многоядерных машинах означает простой половины железа. Правило простое: auto плюс поднятие лимита файловых дескрипторов.
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 8192;
multi_accept on;
}Второй важный блок — таймауты и keepalive. Для API за балансировщиком разумно выставить keepalive_timeout 65 и переиспользовать апстрим-соединения: это убирает лишние TCP-хендшейки и заметно снижает латентность.
Gzip, буферы и кэш
Сжатие на лету включается тремя строками, но типичная ошибка — жать уже сжатое (картинки, видео). Оставьте gzip_types только для текстовых форматов: HTML, CSS, JS, JSON, SVG, XML. Для статики лучше заранее готовить .gz и .br файлы на этапе сборки.
Буферы проксирования влияют на то, сколько памяти уходит на каждый запрос. Дефолтных значений хватает для JSON-ответов, но если вы проксируете большие файлы — увеличьте proxy_buffers и включите proxy_buffering off для стриминга.
Безопасность и лимиты
Не забудьте про limit_req_zone для защиты от брутфорса и server_tokens off, чтобы не светить версию. Итоговый чеклист я собрал в комментариях к конфигу в репозитории проекта — ссылка в конце статьи.