Spec-Zone.ru › nginx

Основные функции

  • Пример конфигурации
  • Директивы
  • accept_mutex
  • accept_mutex_delay
  • daemon
  • debug_connection
  • debug_points
  • env
  • error_log
  • events
  • include
  • load_module
  • lock_file
  • master_process
  • multi_accept
  • pcre_jit
  • pid
  • ssl_engine
  • ssl_object_cache_inheritable
  • stall_threshold
  • thread_pool
  • timer_resolution
  • use
  • user
  • worker_aio_requests
  • worker_connections
  • worker_cpu_affinity
  • worker_priority
  • worker_processes
  • worker_rlimit_core
  • worker_rlimit_nofile
  • worker_shutdown_timeout
  • working_directory

Пример конфигурации

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;

events {
    use kqueue;
    worker_connections 2048;
}

...

Директивы

Синтаксис: accept_mutex on | off;
По умолчанию: accept_mutex off;
Контекст: events

Если включён accept_mutex, рабочие процессы будут по очереди принимать новые соединения. В противном случае все рабочие процессы получат уведомление о новых соединениях, и при небольшом их количестве некоторые рабочие процессы могут лишь расходовать системные ресурсы.

Включать accept_mutex не требуется в системах, поддерживающих флаг EPOLLEXCLUSIVE (1.11.3), или при использовании reuseport.
До версии 1.11.3 значением по умолчанию было on.
Синтаксис: accept_mutex_delay time;
По умолчанию: accept_mutex_delay 500ms;
Контекст: events

Если включён accept_mutex, задаёт максимальное время, в течение которого рабочий процесс будет пытаться возобновить приём новых соединений, если в данный момент их принимает другой рабочий процесс.

Синтаксис: daemon on | off;
По умолчанию: daemon on;
Контекст: main

Определяет, должен ли nginx работать как демон. В основном используется при разработке.

Синтаксис: debug_connection address | CIDR | unix:;
По умолчанию: —
Контекст: events

Включает отладочный журнал для выбранных клиентских соединений. Для остальных соединений используется уровень ведения журнала, заданный директивой error_log. Отлаживаемые соединения задаются IPv4- или IPv6-адресом (1.3.0, 1.2.1) либо сетью. Соединение также можно указать с помощью имени узла. Для соединений через сокеты домена UNIX (1.3.0, 1.2.1) отладочный журнал включается параметром «unix:».

events {
    debug_connection 127.0.0.1;
    debug_connection localhost;
    debug_connection 192.0.2.0/24;
    debug_connection ::1;
    debug_connection 2001:0db8::/32;
    debug_connection unix:;
    ...
}
Чтобы эта директива работала, nginx необходимо собрать с --with-debug, см. «Отладочный журнал».
Синтаксис: debug_points abort | stop;
По умолчанию: —
Контекст: main

Эта директива используется для отладки.

При обнаружении внутренней ошибки, например утечки сокетов при перезапуске рабочих процессов, включение debug_points приводит к созданию файла core (abort) или остановке процесса (stop) для дальнейшего анализа с помощью системного отладчика.

Синтаксис: env variable[=value];
По умолчанию: env TZ;
Контекст: main

По умолчанию nginx удаляет все переменные окружения, унаследованные от родительского процесса, кроме переменной TZ. Эта директива позволяет сохранять некоторые унаследованные переменные, изменять их значения или создавать новые переменные окружения. Затем эти переменные:

  • наследуются при обновлении исполняемого файла без остановки;
  • используются модулем ngx_http_perl_module;
  • используются рабочими процессами. Следует учитывать, что управлять таким образом системными библиотеками удаётся не всегда, поскольку библиотеки обычно проверяют переменные только при инициализации — задолго до того, как их можно задать с помощью этой директивы. Исключение составляет упомянутое выше обновление исполняемого файла без остановки.

Переменная TZ всегда наследуется и доступна модулю ngx_http_perl_module, если только она не настроена явно.

Пример использования:

env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;
Переменная окружения NGINX используется nginx внутри программы, и пользователь не должен задавать её напрямую.
Синтаксис: error_log file [level] [json];
По умолчанию: error_log logs/error.log error;
Контекст: main, http, mail, stream, server, location

Настраивает ведение журнала. На одном уровне конфигурации можно задать несколько журналов (1.5.2). Если на уровне конфигурации main явно не задано ведение журнала в файл, используется файл по умолчанию.

Первый параметр задаёт file, в который будет записываться журнал. Специальное значение stderr указывает на стандартный файл ошибок. Ведение журнала в syslog настраивается с помощью префикса «syslog:». Запись в циклический буфер памяти настраивается с помощью префикса «memory:» и буфера size и обычно используется для отладки (1.7.11).

Второй параметр задаёт level ведения журнала. Возможны следующие значения: debug, info, notice, warn, error, crit, alert или emerg. Уровни журнала перечислены в порядке возрастания серьёзности. При выборе определённого уровня записываются все сообщения этого уровня и более серьёзных уровней. Например, уровень по умолчанию error приводит к записи сообщений error, crit, alert и emerg. Если этот параметр опущен, используется error.

Чтобы работало ведение debug журнала, nginx необходимо собрать с --with-debug, см. «Отладочный журнал».

Параметр json (1.29.8) включает запись журнала в формате JSON с поддержкой контекстных тегов:

{
  "level": "error",
  "timestamp": "2026-05-13T10:30:15.042+00:00",
  "pid": 12345,  "tid": 12345,  "cnum": 3,
  "msg": "connect() failed",
  "client": "192.168.1.10",  "server": "example.com",
  "request": "GET /api HTTP/1.1",
  "upstream": "http://127.0.0.1:8080/api",
  "errno": 111,
  "errtext": "Connection refused"
}

Размер записи журнала не может превышать 2 КБ; данные сверх этого ограничения обрезаются до “truncated”:1. Отладочное ведение журнала для JSON не поддерживается.

Этот параметр доступен в рамках нашей коммерческой подписки.
Начиная с версии 1.7.11 директиву можно указывать на уровне stream, а начиная с версии 1.9.0 — на уровне mail.
Синтаксис: events { ... }
По умолчанию: —
Контекст: main

Задаёт контекст конфигурационного файла, в котором указываются директивы, влияющие на обработку соединений.

Синтаксис: include file | mask;
По умолчанию: —
Контекст: any

Включает в конфигурацию другой file или файлы, соответствующие указанному mask. Включаемые файлы должны содержать синтаксически корректные директивы и блоки.

Пример использования:

include mime.types;
include vhosts/*.conf;
Синтаксис: load_module file;
По умолчанию: —
Контекст: main

Эта директива появилась в версии 1.9.11.

Загружает динамический модуль.

Пример:

load_module modules/ngx_mail_module.so;
Синтаксис: lock_file file;
По умолчанию: lock_file logs/nginx.lock;
Контекст: main

nginx использует механизм блокировок для реализации accept_mutex и сериализации доступа к разделяемой памяти. В большинстве систем блокировки реализуются с помощью атомарных операций, и эта директива игнорируется. В остальных системах используется механизм «lock file». Эта директива задаёт префикс имён файлов блокировок.

Синтаксис: master_process on | off;
По умолчанию: master_process on;
Контекст: main

Определяет, запускаются ли рабочие процессы. Эта директива предназначена для разработчиков nginx.

Синтаксис: multi_accept on | off;
По умолчанию: multi_accept off;
Контекст: events

Если multi_accept отключён, рабочий процесс будет принимать по одному новому соединению за раз. В противном случае рабочий процесс будет принимать все новые соединения одновременно.

Директива игнорируется при использовании метода обработки соединений kqueue, поскольку он сообщает количество новых соединений, ожидающих принятия.
Синтаксис: pcre_jit on | off;
По умолчанию: pcre_jit off;
Контекст: main

Эта директива появилась в версии 1.1.12.

Включает или отключает использование «компиляции точно в срок» (PCRE JIT) для регулярных выражений, известных на момент разбора конфигурации.

PCRE JIT может значительно ускорить обработку регулярных выражений.

JIT доступен в библиотеках PCRE начиная с версии 8.20, собранной с параметром конфигурации --enable-jit. Если библиотека PCRE собирается вместе с nginx (--with-pcre=), поддержка JIT включается параметром конфигурации --with-pcre-jit.
Синтаксис: pid file;
По умолчанию: pid logs/nginx.pid;
Контекст: main

Задаёт file, в котором будет храниться идентификатор процесса главного процесса.

Синтаксис: ssl_engine device;
По умолчанию: —
Контекст: main

Задаёт имя аппаратного ускорителя SSL.

Модуль может динамически загружаться OpenSSL при проверке конфигурации.
Синтаксис: ssl_object_cache_inheritable on | off;
По умолчанию: ssl_object_cache_inheritable on;
Контекст: main

Эта директива появилась в версии 1.27.4.

Если параметр включён, объекты SSL (сертификаты SSL, секретные ключи, доверенные сертификаты CA, списки CRL) наследуются при перезагрузке конфигурации.

Объекты SSL, загруженные из файла, наследуются, если с момента предыдущей загрузки конфигурации не изменились время модификации и индекс файла. Секретные ключи, указанные как engine:name:id, никогда не наследуются. Секретные ключи, указанные как data:value, наследуются всегда.

Объекты SSL, загруженные из переменных, не наследуются.

Пример:

ssl_object_cache_inheritable on;

http {
    ...
    server {
        ...
        ssl_certificate     example.com.crt;
        ssl_certificate_key example.com.key;
    }
}
Синтаксис: stall_threshold time;
По умолчанию: stall_threshold 1000ms;
Контекст: events

Эта директива появилась в версии 1.29.0.

Позволяет переопределить пороговое время по умолчанию для итерации цикла обработки событий, по превышении которого регистрируется задержка. По умолчанию задержка регистрируется, если итерация цикла обработки событий длится более 1000ms. Если включена директива timer_resolution, пороговое время игнорируется.

Эта директива доступна в рамках нашей коммерческой подписки.
Синтаксис: thread_pool name threads=number [max_queue=number];
По умолчанию: thread_pool default threads=32 max_queue=65536;
Контекст: main

Эта директива появилась в версии 1.7.11.

Задаёт name и параметры пула потоков, используемого для многопоточного чтения и отправки файлов без блокировки рабочих процессов.

Параметр threads задаёт количество потоков в пуле.

Если все потоки в пуле заняты, новая задача будет ожидать в очереди. Параметр max_queue ограничивает количество задач, которые могут ожидать в очереди. По умолчанию в очереди могут ожидать до 65536 задач. При переполнении очереди задача завершается с ошибкой.

Синтаксис: timer_resolution interval;
По умолчанию: —
Контекст: main

Снижает разрешение таймера в рабочих процессах, тем самым сокращая количество системных вызовов gettimeofday(). По умолчанию gettimeofday() вызывается при каждом получении события ядра. При снижении разрешения gettimeofday() вызывается только один раз за указанный interval.

Пример:

timer_resolution 100ms;

Внутренняя реализация интервала зависит от используемого метода:

  • фильтр EVFILT_TIMER, если используется kqueue;
  • timer_create(), если используется eventport;
  • setitimer() в остальных случаях.
Синтаксис: use method;
По умолчанию: —
Контекст: events

Задаёт method обработки соединений. Обычно указывать его явно не требуется, поскольку по умолчанию nginx использует наиболее эффективный метод.

Синтаксис: user user [group];
По умолчанию: user nobody nobody;
Контекст: main

Задаёт учётные данные user и group, используемые рабочими процессами. Если group не указан, используется группа с тем же именем, что и у user.

Синтаксис: worker_aio_requests number;
По умолчанию: worker_aio_requests 32;
Контекст: events

Эта директива появилась в версиях 1.1.4 и 1.0.7.

При использовании aio с методом обработки соединений epoll задаёт максимальное number незавершённых операций асинхронного ввода-вывода для одного рабочего процесса.

Синтаксис: worker_connections number;
По умолчанию: worker_connections 512;
Контекст: events

Задаёт максимальное количество одновременных соединений, которые может открыть рабочий процесс.

Следует учитывать, что это число включает все соединения (например, соединения с проксируемыми серверами), а не только соединения с клиентами. Кроме того, фактическое количество одновременных соединений не может превышать действующий предел на максимальное количество открытых файлов, который можно изменить с помощью worker_rlimit_nofile.

Синтаксис: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
По умолчанию: —
Контекст: main

Привязывает рабочие процессы к наборам процессоров. Каждый набор процессоров задаётся битовой маской разрешённых процессоров. Для каждого рабочего процесса следует определить отдельный набор. По умолчанию рабочие процессы не привязаны к каким-либо конкретным процессорам.

Например,

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

привязывает каждый рабочий процесс к отдельному процессору, а

worker_processes    2;
worker_cpu_affinity 0101 1010;

привязывает первый рабочий процесс к CPU0/CPU2, а второй — к CPU1/CPU3. Второй пример подходит для систем с гиперпоточностью.

Специальное значение auto (1.9.10) позволяет автоматически привязывать рабочие процессы к доступным процессорам:

worker_processes auto;
worker_cpu_affinity auto;

Необязательный параметр mask можно использовать, чтобы ограничить набор процессоров, доступных для автоматической привязки:

worker_cpu_affinity auto 01010101;
Директива доступна только в FreeBSD и Linux.
Синтаксис: worker_priority number;
По умолчанию: worker_priority 0;
Контекст: main

Задаёт приоритет планирования рабочих процессов, как это делает команда nice: отрицательное значение number означает более высокий приоритет. Обычно допустимый диапазон — от -20 до 20.

Пример:

worker_priority -10;
Синтаксис: worker_processes number | auto;
По умолчанию: worker_processes 1;
Контекст: main

Задаёт количество рабочих процессов.

Оптимальное значение зависит от многих факторов, включая (но не ограничиваясь ими) количество ядер процессора, количество жёстких дисков с данными и характер нагрузки. Если вы не уверены, начните со значения, равного количеству доступных ядер процессора (значение «auto» попытается определить его автоматически).

Параметр auto поддерживается начиная с версий 1.3.8 и 1.2.5.
Синтаксис: worker_rlimit_core size;
По умолчанию: —
Контекст: main

Изменяет ограничение на максимальный размер файла core (RLIMIT_CORE) для рабочих процессов. Позволяет увеличить это ограничение без перезапуска главного процесса.

Синтаксис: worker_rlimit_nofile number;
По умолчанию: —
Контекст: main

Изменяет ограничение на максимальное количество открытых файлов (RLIMIT_NOFILE) для рабочих процессов. Позволяет увеличить это ограничение без перезапуска главного процесса.

Синтаксис: worker_shutdown_timeout time;
По умолчанию: —
Контекст: main

Эта директива появилась в версии 1.11.11.

Задаёт тайм-аут для корректного завершения работы рабочих процессов. По истечении time nginx попытается закрыть все открытые на данный момент соединения, чтобы завершить работу.

Синтаксис: working_directory directory;
По умолчанию: —
Контекст: main

Задаёт текущий рабочий каталог для рабочего процесса. В основном он используется при записи файла core; в этом случае рабочему процессу необходимо иметь разрешение на запись в указанный каталог.

© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/ngx_core_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API