Файл nginx.conf — это основа работы веб-сервера. Его структура определяет производительность, безопасность и удобство поддержки всей системы. В этом руководстве мы подробно разберем иерархию конфигурационного файла Nginx, от глобальных параметров до правил обработки конкретных URL. Вы получите готовые, проверенные на практике примеры настроек для каждой ключевой секции — main, events, http, server и location, — которые можно сразу адаптировать для ваших проектов. Материал актуален для стабильных версий Nginx в 2026 году и поможет системным администраторам и DevOps инженерам создавать эффективные и надежные конфигурации, избегая распространенных ошибок.
Структура nginx.conf: Иерархия от глобальных настроек до конкретных правил
Конфигурация Nginx построена на системе вложенных контекстов, где каждый блок определяет область применения своих директив. Понимание этой иерархии — ключ к управлению любым, даже самым сложным конфигом. Логический порядок следующий:
- main: Глобальные параметры, влияющие на весь сервер и его процессы.
- events: Модель обработки сетевых соединений.
- http: Главный контейнер для всех настроек, связанных с обработкой HTTP/HTTPS трафика.
- server: Определение виртуальных хостов (доменов или IP-адресов).
- location: Правила обработки запросов к конкретным URI внутри сервера.
Директивы из более высокого контекста (например, main) наследуются в более низкие, но могут быть переопределены. Правильная организация этой структуры критически важна для производительности и дальнейшей поддержки.
Секция main: Глобальные параметры сервера и рабочих процессов
Секция main находится вне любых блоков и содержит директивы, которые влияют на фундаментальные параметры работы Nginx. Их изменение обычно требует перезагрузки сервера (nginx -s reload).
Ключевые директивы и примеры их настроек:
# nginx.conf - секция main
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;- worker_processes: Определяет количество рабочих процессов. Значение
autoпозволяет Nginx использовать количество доступных CPU ядер. Для маломощной VPS с 1-2 ядрами можно установить фиксированное число (например,2). Для мощного сервера с 16 ядрами лучше оставитьautoили установить16. - worker_rlimit_nofile: Устанавливает мягкий лимит файловых дескрипторов для каждого рабочего процесса. Это значение должно быть не меньше, чем
worker_connectionsв секцииevents. Значение65535является стандартным для высоконагруженных систем. - user/group: Определяет пользователя и группу, под которыми будут работать процессы. Настройка
user nginx;повышает безопасность, ограничивая права процессов. - error_log: Путь к файлу глобальных ошибок и уровень детализации (
warn,error,info). - pid: Путь к файлу, где хранится PID главного процесса.
Важно: изменения в секции main применяются только после полной перезагрузки сервера (systemctl restart nginx или nginx -s stop и запуск).
Секции events и http: Фундамент для обработки соединений
Блок events определяет, как Nginx будет работать с сетевыми соединениями. Он обязателен и располагается сразу после секции main.
events {
use epoll;
worker_connections 4096;
multi_accept on;
}- use: Метод обработки соединений. Для Linux систем оптимальным является
epoll. - worker_connections: Максимальное количество одновременных соединений, которые может обработать один рабочий процесс. Общее максимальное число клиентов рассчитывается как
worker_processes * worker_connections. Для сервера с 4 процессами иworker_connections 4096максимум составит 16384 соединений. - multi_accept: Если установлено
on, процесс будет принимать все новые соединения из очереди сокетов сразу, что может повысить производительность при высокой нагрузке.
Секция http является центральным контейнером для всех настроек, связанных с HTTP и HTTPS. В нее помещаются все server блоки, общие настройки MIME-типов, логирования, кэширования и оптимизации.
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
access_log /var/log/nginx/access.log;
# Здесь будут размещаться server блоки
server {
...
}
}Это минимальная, но рабочая конфигурация блока http. Директивы sendfile и tcp_nopush оптимизируют отдачу статичных файлов, keepalive_timeout управляет временем жизни keepalive-соединений.
Готовые примеры настроек server и location для типовых задач
Блок server определяет виртуальный хост — отдельный сайт или сервис, доступный по определенному домену или IP-адресу. Практические примеры:
Базовый сервер для статического сайта
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}Сервер с HTTPS (актуальные настройки 2026 года)
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
root /var/www/example.com;
index index.html;
}Директива http2 активирует поддержку HTTP/2 для повышения производительности. Настройки шифров и протоколов соответствуют современным требованиям безопасности. Для полной защиты рекомендуется также настроить HSTS и другие механизмы.
Перенаправление HTTP -> HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}Директива location: Синтаксис, приоритеты и практика применения
Блок location — самый важный инструмент для маршрутизации запросов внутри server. Его синтаксис: location [modifier] uri { ... }. Модификаторы определяют тип сопоставления:
- =: Точное совпадение.
location = /admin { ... }обработает только запрос к/admin. - ^~: Префиксное совпадение с приоритетом над регулярными выражениями.
- ~: Регулярное выражение, регистрозависимое.
- ~*: Регулярное выражение, регистронезависимое.
- (без модификатора): Префиксное совпадение.
Nginx выбирает location по следующему алгоритму: сначала проверяются точные совпадения (=), затем префиксные с приоритетом (^~), затем регулярные выражения (~ и ~*) в порядке их объявления в конфиге, и в конце — обычные префиксные совпадения. Порядок объявления регулярных выражений имеет значение.
Практические location-блоки: отдача статики, проксирование, запрет доступа
Пример 1: Отдача статических файлов с кэшированием в браузере.
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}Пример 2: Проксирование запросов на бэкенд-сервер (например, API или приложение).
location /api/ {
proxy_pass http://backend_server:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
}Это базовый шаблон для проксирования. Для сложных сценариев, таких как балансировка нагрузки между несколькими бэкендами, потребуется более детальная конфигурация upstream блоков, которую можно найти в руководстве по балансировке нагрузки.
Пример 3: Запрет доступа к определенному пути.
location /admin {
deny all;
return 403;
}Пример 4: Обработка фавиконки без логирования ошибок.
location = /favicon.ico {
log_not_found off;
access_log off;
}Оптимизация производительности и безопасности: Проверенные директивы
Эффективная конфигурация Nginx требует баланса между скоростью обработки запросов и защитой от угроз. Следующие директивы, размещаемые в секциях http или server, дают проверенный результат.
Настройка рабочих процессов и соединений под вашу нагрузку
Расчет ключевых параметров должен основываться на характеристиках сервера.
- worker_processes: Чаще всего оптимально значение
auto. Для точного контроля можно установить равным количеству CPU ядер (например,4для 4-ядерного процессора). - worker_connections: Максимум соединений =
worker_processes * worker_connections. Для сервера с 4 процессами и ожидаемой нагрузкой ~10k одновременных соединений установитеworker_connections 4096(4 * 4096 = 16384). Не забудьте проверить и увеличить системный лимит файловых дескрипторов (ulimit -n) до значения большего, чемworker_rlimit_nofile.
Пример конфигурации для маломощной VPS (1-2 ядра, небольшая нагрузка):
worker_processes 2;
worker_rlimit_nofile 2048;
events {
worker_connections 1024;
}Пример для мощного выделенного сервера:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 8192;
}Для мониторига текущей нагрузки можно использовать модуль stub_status.
Другие ключевые директивы для оптимизации и безопасности:
- Производительность:
sendfile on;(использование системного вызова sendfile),tcp_nopush on;(оптимизация отправки пакетов),gzip on;(компрессия ответов),client_body_buffer_size 16k;(размер буфера для тела запроса). - Таймауты:
keepalive_timeout 65;(для клиентов),proxy_read_timeout 30s;(при проксировании). - Безопасность:
server_tokens off;(скрытие версии Nginx в заголовках),client_max_body_size 10m;(ограничение размера загружаемых файлов), обязательные заголовки безопасности вserverблоке:add_header X-Frame-Options "SAMEORIGIN" always;add_header X-Content-Type-Options "nosniff" always;add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Полный набор современных практик безопасности, включая настройку TLS 1.3 и защиту от распространенных атак, рассматривается в отдельном практическом руководстве по защите Nginx.
Организация конфигурации для командной работы и долгосрочной поддержки
«Спагетти-конфиг» — одна из главных проблем в DevOps-среде. Чистая организация файлов облегчает поддержку, особенно когда над конфигурацией работает несколько человек. Основной инструмент для декомпозиции — директива include.
Рекомендуемая структура каталогов и файлов:
/etc/nginx/
├── nginx.conf # Основной конфиг
├── conf.d/ # Общие настройки
│ ├── security-headers.conf
│ ├── gzip.conf
│ └── ssl-common.conf
├── sites-available/ # Конфигурации виртуальных хостов
│ ├── example.com.conf
│ ├── api-backend.conf
└── sites-enabled/ # Активные хосты (симлинки на available)
├── example.com.conf
└── api-backend.confПример основного nginx.conf, построенного на include:
user nginx;
worker_processes auto;
...
events {
worker_connections 4096;
}
http {
include /etc/nginx/conf.d/*.conf; # Общие настройки
include /etc/nginx/sites-enabled/*.conf; # Активные сайты
}Такой подход позволяет:
- Изолировать конфигурацию каждого сайта в отдельный файл.
- Создавать общие шаблоны для SSL, безопасности или оптимизации.
- Легко включать/выключать сайты (симлинки между
sites-availableиsites-enabled). - Версионировать конфигурации вместе с кодом приложения.
Не забывайте добавлять комментарии к неочевидным правилам, особенно к сложным блокам location с регулярными выражениями.
Проверка, применение и актуальность конфигурации (2026)
Перед внесением любых изменений в production-среде необходимо выполнить проверку. Пошаговая инструкция:
- Проверка синтаксиса: Выполните команду
nginx -t. Она проверяет корректность конфигурации и указывает на ошибки, если они есть. - Безопасное применение изменений: Если проверка прошла успешно, отправьте сигнал reload:
nginx -s reloadилиsystemctl reload nginx. Это позволит применять изменения без полной остановки сервера. - Анализ ошибок: Если сервер не запускается или reload не работает, проверьте файл ошибок, указанный в
error_log. Чаще всего проблемы связаны с неправильными путями, синтаксисом или конфликтами портов.
Все примеры в этом руководстве проверены на актуальной стабильной ветке Nginx (1.24.x / 1.25.x) и совместимы с распространенными дистрибутивами Linux (Ubuntu 22.04+, Debian 11+, CentOS Stream 9) в 2026 году. Однако для самых свежих версий или специфичных дистрибутивов всегда рекомендуется сверяться с официальной документацией Nginx.
Финальный совет: начинайте с минимальной рабочей конфигурации, обеспечивающей базовую функциональность. Затем постепенно добавляйте оптимизации и правила безопасности, проверяя каждое изменение. Это снижает риск ошибок и позволяет понять влияние каждой директивы на работу сервера. Для сложных задач, таких как развертывание полнофункционального reverse proxy, используйте специализированные руководства с готовыми конфигурациями для интеграции с Docker, PHP-FPM и другими технологиями.