Nginx.conf 2026: Полный разбор структуры и практические примеры настроек для DevOps | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Nginx.conf 2026: Полный разбор структуры и практические примеры настроек для DevOps

06 апреля 2026 7 мин. чтения

Файл 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-среде необходимо выполнить проверку. Пошаговая инструкция:

  1. Проверка синтаксиса: Выполните команду nginx -t. Она проверяет корректность конфигурации и указывает на ошибки, если они есть.
  2. Безопасное применение изменений: Если проверка прошла успешно, отправьте сигнал reload: nginx -s reload или systemctl reload nginx. Это позволит применять изменения без полной остановки сервера.
  3. Анализ ошибок: Если сервер не запускается или 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 и другими технологиями.

Поделиться:
Сохранить гайд? В закладки браузера