nginx

Основная функциональность


english
русский

简体中文
עברית
日本語
türkçe

новости [en]
об nginx
скачать
безопасность [en]
pgp ключи [en]
документация
faq
ссылки [en]
книги [en]
поддержка
пожертвования [en]

trac
wiki
twitter
nginx.com
Пример конфигурации
Директивы
     accept_mutex
     accept_mutex_delay
     daemon
     debug_connection
     debug_points
     error_log
     env
     events
     include
     lock_file
     master_process
     multi_accept
     pcre_jit
     pid
     ssl_engine
     timer_resolution
     use
     user
     worker_aio_requests
     worker_connections
     worker_cpu_affinity
     worker_priority
     worker_processes
     worker_rlimit_core
     worker_rlimit_nofile
     worker_rlimit_sigpending
     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 on;
контекст: events

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

Использование метода обработки соединений rtsig требует обязательного включения accept_mutex.

синтаксис: accept_mutex_delay время;
умолчание:
accept_mutex_delay 500ms;
контекст: events

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

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

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

синтаксис: debug_connection адрес | 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) с целью последующей диагностики с помощью системного отладчика.

синтаксис: error_log файл | stderr [debug | info | notice | warn | error | crit | alert | emerg];
умолчание:
error_log logs/error.log error;
контекст: main, http, server, location

Конфигурирует запись в лог.

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

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

Для работы уровня лога debug необходимо сконфигурировать nginx с --with-debug.

синтаксис: env переменная[=значение];
умолчание:
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 и не должна устанавливаться непосредственно самим пользователем.

синтаксис: events { ... }
умолчание:
контекст: main

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

синтаксис: include файл | маска;
умолчание:
контекст: любой

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

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

include mime.types;
include vhosts/*.conf;

синтаксис: lock_file файл;
умолчание:
lock_file logs/nginx.lock;
контекст: main

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

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

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

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

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

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

Использование метода обработки соединений rtsig автоматически включает multi_accept.

синтаксис: pcre_jit on | off;
умолчание:
pcre_jit off;
контекст: main

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

Разрешает или запрещает использование JIT-компиляции (PCRE JIT) для регулярных выражений, известных на момент парсинга конфигурации.

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

Для работы JIT необходима библиотека PCRE версии 8.20 или выше, собранная с параметром конфигурации --enable-jit. При сборке библиотеки PCRE вместе с nginx (--with-pcre=), для включения поддержки JIT необходимо использовать параметр конфигурации --with-pcre-jit.

синтаксис: pid файл;
умолчание:
pid nginx.pid;
контекст: main

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

синтаксис: ssl_engine устройство;
умолчание:
контекст: main

Задаёт название аппаратного SSL-акселератора.

синтаксис: timer_resolution интервал;
умолчание:
контекст: main

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

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

timer_resolution 100ms;

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

  • фильтр EVFILT_TIMER при использовании kqueue;
  • timer_create() при использовании eventport;
  • и setitimer() во всех остальных случаях.

синтаксис: use метод;
умолчание:
контекст: events

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

синтаксис: user пользователь [группа];
умолчание:
user nobody nobody;
контекст: main

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

синтаксис: worker_aio_requests число;
умолчание:
worker_aio_requests 32;
контекст: events

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

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

синтаксис: worker_connections число;
умолчание:
worker_connections 512;
контекст: events

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

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

синтаксис: worker_cpu_affinity маска_CPU ...;
умолчание:
контекст: main

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

Например,

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

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

worker_processes    2;
worker_cpu_affinity 0101 1010;

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

Директива доступна только на FreeBSD и Linux.

синтаксис: worker_priority число;
умолчание:
worker_priority 0;
контекст: main

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

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

worker_priority -10;

синтаксис: worker_processes число | auto;
умолчание:
worker_processes 1;
контекст: main

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

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

Параметр auto поддерживается только начиная с версий 1.3.8 и 1.2.5.

синтаксис: worker_rlimit_core размер;
умолчание:
контекст: main

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

синтаксис: worker_rlimit_nofile число;
умолчание:
контекст: main

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

синтаксис: worker_rlimit_sigpending число;
умолчание:
контекст: main

На системах с поддержкой метода обработки соединений rtsig, изменяет ограничение на размер очереди сигналов (RLIMIT_SIGPENDING) для рабочих процессов. Используется для увеличения ограничения без перезапуска основного процесса.

синтаксис: working_directory каталог;
умолчание:
контекст: main

Задаёт каталог, который будет текущим для рабочего процесса. Основное применение — запись core-файла, в этом случае рабочий процесс должен иметь права на запись в этот каталог.