Nginx error log off

I have the following in config file server { listen 80; server_name _; access_log /var/log/nginx/access.log main; ... server { listen 80; server_name example...

OP’s problem was a syntax error, which is explained in this answer.

As of January 2020, with nginx 1.14.0+ the general problem of disabling access and error logging in nginx is solved as follows:

Access logs

To disable logs on some configuration level, assuming that it has been explicitly enabled on a higher one or are enabled by default (as they are), use this directive*:

access_log off;

(Answers saying that you should redirect this kind of logs to /dev/null are outdated.)

Note that the access_log directive may be set multiple times on a single level but the above entry disables all access log logging on the current level.

Source: nginx docs for access_log

Error logs

Disabling error logs is more tricky as there is NO explicit option to turn it off on a lower configuration level, if it has been enabled on a higher one or it is enabled by default (as it is)!

So in this case you should use what this answer proposed:

error_log /dev/null;

Source: nginx docs for error_log

Caveats

Imagine that you have a single http with access log enabled on this level, and inside multiple server entries and one of these servers is an entry point to all others. Let’s say you have one server with SSL configured that listens for connections from outside with HTTPS and it redirects them to other servers which are various API gateways.

Then it’s not enough to disable access logs in some of the API gateway servers (or their locations) as the request will be still logged in the access log of the external HTTPS server.

Bad example:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      proxy_pass http://localhost:81;
    }
    (...)
  }

  server {
    listen 81;
    access_log off; # <----- this WON'T effectively work - requests will be logged in the access log by the server above
    (...)
  }
  (...)
}

You would have to disable access logs on the whole paths of given requests to make it work in this case. But of course a better solution would be to consider simplifying your config as you may run into many more surprises even after you solve the problem with access logs…

Simpler config example:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      access_log off; # <----- this WILL work
      proxy_pass http://app1server;
    }
    (...)
  }

}

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

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

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

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

Синтаксис: error_log файл [уровень];
Умолчание:
error_log logs/error.log error;
Контекст: main, http, mail, stream, server, location

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

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

Специальное значение stderr выбирает стандартный файл ошибок.
Запись в syslog настраивается указанием префикса
syslog:”.
Запись в
кольцевой буфер в памяти
настраивается указанием префикса “memory:” и
размера буфера и как правило используется для отладки (1.7.11).

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

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

Директива может быть указана на
уровне stream
начиная с версии 1.7.11
и на уровне mail
начиная с версии 1.9.0.

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

Контекст: main

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

Синтаксис: include файл | маска;
Умолчание:

Контекст: любой

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

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

include mime.types;
include vhosts/*.conf;
Синтаксис: load_module файл;
Умолчание:

Контекст: main

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

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

Пример:

load_module modules/ngx_mail_module.so;
Синтаксис: 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, т.к. данный метод сам сообщает
число новых соединений, ожидающих приёма.

Синтаксис: 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 logs/nginx.pid;
Контекст: main

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

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

Контекст: main

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

Синтаксис: thread_pool
имя
threads=число
[max_queue=число];
Умолчание:
thread_pool default threads=32 max_queue=65536;
Контекст: main

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

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

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

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

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

Контекст: main

Уменьшает разрешение таймеров времени в рабочих процессах, за счёт
чего уменьшается число системных вызовов gettimeofday().
По умолчанию gettimeofday() вызывается после каждой
операции получения событий из ядра.
При уменьшении разрешения 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 ...;
worker_cpu_affinity auto [маска_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.

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

worker_processes auto;
worker_cpu_affinity auto;

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

worker_cpu_affinity auto 01010101;

Директива доступна только на 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_shutdown_timeout время;
Умолчание:

Контекст: main

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

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

Синтаксис: working_directory каталог;
Умолчание:

Контекст: main

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

OP’s problem was a syntax error, which is explained in this answer.

As of January 2020, with nginx 1.14.0+ the general problem of disabling access and error logging in nginx is solved as follows:

Access logs

To disable logs on some configuration level, assuming that it has been explicitly enabled on a higher one or are enabled by default (as they are), use this directive*:

access_log off;

(Answers saying that you should redirect this kind of logs to /dev/null are outdated.)

Note that the access_log directive may be set multiple times on a single level but the above entry disables all access log logging on the current level.

Source: nginx docs for access_log

Error logs

Disabling error logs is more tricky as there is NO explicit option to turn it off on a lower configuration level, if it has been enabled on a higher one or it is enabled by default (as it is)!

So in this case you should use what this answer proposed:

error_log /dev/null;

Source: nginx docs for error_log

Caveats

Imagine that you have a single http with access log enabled on this level, and inside multiple server entries and one of these servers is an entry point to all others. Let’s say you have one server with SSL configured that listens for connections from outside with HTTPS and it redirects them to other servers which are various API gateways.

Then it’s not enough to disable access logs in some of the API gateway servers (or their locations) as the request will be still logged in the access log of the external HTTPS server.

Bad example:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      proxy_pass http://localhost:81;
    }
    (...)
  }

  server {
    listen 81;
    access_log off; # <----- this WON'T effectively work - requests will be logged in the access log by the server above
    (...)
  }
  (...)
}

You would have to disable access logs on the whole paths of given requests to make it work in this case. But of course a better solution would be to consider simplifying your config as you may run into many more surprises even after you solve the problem with access logs…

Simpler config example:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      access_log off; # <----- this WILL work
      proxy_pass http://app1server;
    }
    (...)
  }

}

I compiled the nginx on Ubuntu myself.
I start my nginx with -c nginx.conf parameter.
In my nginx.conf file, I try to turn off error log with but failed.

error_log /dev/null crit;

Still got the error message:
nginx: [alert] could not open error log file: open() «/usr/nginx/logs/error.log» failed (2: No such file or directory)

How could I turn off this log or change its location?

asked Nov 14, 2012 at 1:54

Dean Chen's user avatar

2

The syntax for disabling the error log is ok, but the docs state that a default logfile is used before the config is read. (which seems reasonable because how would it otherwise tell you you have an error in your config)

Try creating this file by hand with the correct permissions for the user that runs nginx. Or try starting the server as root.

answered Nov 14, 2012 at 13:21

RickyA's user avatar

RickyARickyA

15.3k5 gold badges68 silver badges94 bronze badges

4

I solved this issue using the -p parameter when starting nginx e.g:

/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx

This will prepend any log paths specified in the config with the prefix directory.

answered Jun 15, 2013 at 19:22

Michael's user avatar

MichaelMichael

2,2481 gold badge23 silver badges31 bronze badges

4

I just solved this by using this configure parameter:

./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr

Since I never use this nginx as a daemon and always run it in a shell, it makes sense for it to log errors to stderr.

answered Sep 10, 2015 at 7:21

Hubro's user avatar

HubroHubro

55k66 gold badges219 silver badges372 bronze badges

0

You can’t solve the problem by specifying a -p prefix; because that would only apply to the directives in the configuration file; and as RickyA already noted the problem is that there is a compiled-in error log that nginx wants to open even before it opens the configuration. Changing permissions of the compiled-in error log is not ideal, for obvious reasons.

A workaround is to specify the error log as a configuration on the command line:

$ nginx -p . -g 'error_log error.log;'

or

$ nginx -p . -g 'error_log stderr;'

You’ll still get an [alert] but at least it allowed me to start nginx as non-root on Ubuntu.

answered Jun 26, 2014 at 5:56

Ben Hekster's user avatar

1

Per this post on the nginx.org mailing list (extract quoted below), the %%ERROR_LOG_PATH%% is set as a compile option, and checked immediately on startup, causing the «Could not open» alert. Specifying the prefix (with -p) may help suppress the alert, but only if the %%ERROR_LOG_PATH%% was specified as a relative path at compile time.

You can check how it is specified in your current executable with

nginx -V 2>&1 | grep -oE 'error-log-path=S*'

That is why the solution proposed by @Michael works for some, but not for others.

See changelog:

Changes with nginx 0.7.53

*) Change: now a log set by —error-log-path is created from the very
start-up.

*) Feature: now the start up errors and warnings are outputted to an
error_log and stderr.

Now compiled in error_log value always used to log errors at start
time (and emits warning if nginx can’t open it). Once config file
have been read — error_log from config will be used instead.

If you have compiled nginx with error_log path relative to prefix
— it should be possible to override startup error_log via -p
switch.

Maxim Dounin

answered Jan 2, 2018 at 21:55

Randall's user avatar

RandallRandall

2,7241 gold badge21 silver badges22 bronze badges

There’s no need to use a command line parameter. Simply ensure you add the error_log directive to the very top of nginx.conf or at least before any error messages may occur.

nh2’s comment from Jan 2016 suggests that this option would have been available for at least a couple years now. I can confirm it works and it’s less hassle. Customisation to nginx.conf is less likely to cause issues with updates to a packaged nginx installation than the alternatives.

answered Apr 4, 2018 at 17:13

Sam Hall's user avatar

Sam HallSam Hall

1541 silver badge6 bronze badges

Содержание

  1. Core functionality
  2. Example Configuration
  3. Directives

Core functionality

Example Configuration

Directives

Syntax: accept_mutex on | off ;
Default:
Context: events

If accept_mutex is enabled, worker processes will accept new connections by turn. Otherwise, all worker processes will be notified about new connections, and if volume of new connections is low, some of the worker processes may just waste system resources.

There is no need to enable accept_mutex on systems that support the EPOLLEXCLUSIVE flag (1.11.3) or when using reuseport.

Prior to version 1.11.3, the default value was on .

Syntax: accept_mutex_delay time ;
Default:
Context: events

If accept_mutex is enabled, specifies the maximum time during which a worker process will try to restart accepting new connections if another worker process is currently accepting new connections.

Syntax: daemon on | off ;
Default:
Context: main

Determines whether nginx should become a daemon. Mainly used during development.

Syntax: debug_connection address | CIDR | unix: ;
Default:
Context: events

Enables debugging log for selected client connections. Other connections will use logging level set by the error_log directive. Debugged connections are specified by IPv4 or IPv6 (1.3.0, 1.2.1) address or network. A connection may also be specified using a hostname. For connections using UNIX-domain sockets (1.3.0, 1.2.1), debugging log is enabled by the “ unix: ” parameter.

For this directive to work, nginx needs to be built with —with-debug , see “A debugging log”.

Syntax: debug_points abort | stop ;
Default:
Context: main

This directive is used for debugging.

When internal error is detected, e.g. the leak of sockets on restart of working processes, enabling debug_points leads to a core file creation ( abort ) or to stopping of a process ( stop ) for further analysis using a system debugger.

Syntax: env variable [= value ];
Default:
Context: main

By default, nginx removes all environment variables inherited from its parent process except the TZ variable. This directive allows preserving some of the inherited variables, changing their values, or creating new environment variables. These variables are then:

  • inherited during a live upgrade of an executable file;
  • used by the ngx_http_perl_module module;
  • used by worker processes. One should bear in mind that controlling system libraries in this way is not always possible as it is common for libraries to check variables only during initialization, well before they can be set using this directive. An exception from this is an above mentioned live upgrade of an executable file.

The TZ variable is always inherited and available to the ngx_http_perl_module module, unless it is configured explicitly.

The NGINX environment variable is used internally by nginx and should not be set directly by the user.

Syntax: error_log file [ level ];
Default:
Context: main , http , mail , stream , server , location

Configures logging. Several logs can be specified on the same configuration level (1.5.2). If on the main configuration level writing a log to a file is not explicitly defined, the default file will be used.

The first parameter defines a file that will store the log. The special value stderr selects the standard error file. Logging to syslog can be configured by specifying the “ syslog: ” prefix. Logging to a cyclic memory buffer can be configured by specifying the “ memory: ” prefix and buffer size , and is generally used for debugging (1.7.11).

The second parameter determines the level of logging, and can be one of the following: debug , info , notice , warn , error , crit , alert , or emerg . Log levels above are listed in the order of increasing severity. Setting a certain log level will cause all messages of the specified and more severe log levels to be logged. For example, the default level error will cause error , crit , alert , and emerg messages to be logged. If this parameter is omitted then error is used.

For debug logging to work, nginx needs to be built with —with-debug , see “A debugging log”.

The directive can be specified on the stream level starting from version 1.7.11, and on the mail level starting from version 1.9.0.

Syntax: events < . >
Default:
Context: main

Provides the configuration file context in which the directives that affect connection processing are specified.

Syntax: include file | mask ;
Default:
Context: any

Includes another file , or files matching the specified mask , into configuration. Included files should consist of syntactically correct directives and blocks.

Syntax: load_module file ;
Default:
Context: main

This directive appeared in version 1.9.11.

Loads a dynamic module.

Syntax: lock_file file ;
Default:
Context: main

nginx uses the locking mechanism to implement accept_mutex and serialize access to shared memory. On most systems the locks are implemented using atomic operations, and this directive is ignored. On other systems the “lock file” mechanism is used. This directive specifies a prefix for the names of lock files.

Syntax: master_process on | off ;
Default:
Context: main

Determines whether worker processes are started. This directive is intended for nginx developers.

Syntax: multi_accept on | off ;
Default:
Context: events

If multi_accept is disabled, a worker process will accept one new connection at a time. Otherwise, a worker process will accept all new connections at a time.

The directive is ignored if kqueue connection processing method is used, because it reports the number of new connections waiting to be accepted.

Syntax: pcre_jit on | off ;
Default:
Context: main

This directive appeared in version 1.1.12.

Enables or disables the use of “just-in-time compilation” (PCRE JIT) for the regular expressions known by the time of configuration parsing.

PCRE JIT can speed up processing of regular expressions significantly.

The JIT is available in PCRE libraries starting from version 8.20 built with the —enable-jit configuration parameter. When the PCRE library is built with nginx ( —with-pcre= ), the JIT support is enabled via the —with-pcre-jit configuration parameter.

Syntax: pid file ;
Default:
Context: main

Defines a file that will store the process ID of the main process.

Syntax: ssl_engine device ;
Default:
Context: main

Defines the name of the hardware SSL accelerator.

Syntax: thread_pool name threads = number [ max_queue = number ];
Default:
Context: main

This directive appeared in version 1.7.11.

Defines the name and parameters of a thread pool used for multi-threaded reading and sending of files without blocking worker processes.

The threads parameter defines the number of threads in the pool.

In the event that all threads in the pool are busy, a new task will wait in the queue. The max_queue parameter limits the number of tasks allowed to be waiting in the queue. By default, up to 65536 tasks can wait in the queue. When the queue overflows, the task is completed with an error.

Syntax: timer_resolution interval ;
Default:
Context: main

Reduces timer resolution in worker processes, thus reducing the number of gettimeofday() system calls made. By default, gettimeofday() is called each time a kernel event is received. With reduced resolution, gettimeofday() is only called once per specified interval .

Internal implementation of the interval depends on the method used:

  • the EVFILT_TIMER filter if kqueue is used;
  • timer_create() if eventport is used;
  • setitimer() otherwise.
Syntax: use method ;
Default:
Context: events

Specifies the connection processing method to use. There is normally no need to specify it explicitly, because nginx will by default use the most efficient method.

Syntax: user user [ group ];
Default:
Context: main

Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.

Syntax: worker_aio_requests number ;
Default:
Context: events

This directive appeared in versions 1.1.4 and 1.0.7.

When using aio with the epoll connection processing method, sets the maximum number of outstanding asynchronous I/O operations for a single worker process.

Syntax: worker_connections number ;
Default:
Context: events

Sets the maximum number of simultaneous connections that can be opened by a worker process.

It should be kept in mind that this number includes all connections (e.g. connections with proxied servers, among others), not only connections with clients. Another consideration is that the actual number of simultaneous connections cannot exceed the current limit on the maximum number of open files, which can be changed by worker_rlimit_nofile.

Syntax: worker_cpu_affinity cpumask . ;
worker_cpu_affinity auto [ cpumask ];
Default:
Context: main

Binds worker processes to the sets of CPUs. Each CPU set is represented by a bitmask of allowed CPUs. There should be a separate set defined for each of the worker processes. By default, worker processes are not bound to any specific CPUs.

binds each worker process to a separate CPU, while

binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3. The second example is suitable for hyper-threading.

The special value auto (1.9.10) allows binding worker processes automatically to available CPUs:

The optional mask parameter can be used to limit the CPUs available for automatic binding:

The directive is only available on FreeBSD and Linux.

Syntax: worker_priority number ;
Default:
Context: main

Defines the scheduling priority for worker processes like it is done by the nice command: a negative number means higher priority. Allowed range normally varies from -20 to 20.

Syntax: worker_processes number | auto ;
Default:
Context: main

Defines the number of worker processes.

The optimal value depends on many factors including (but not limited to) the number of CPU cores, the number of hard disk drives that store data, and load pattern. When one is in doubt, setting it to the number of available CPU cores would be a good start (the value “ auto ” will try to autodetect it).

The auto parameter is supported starting from versions 1.3.8 and 1.2.5.

Syntax: worker_rlimit_core size ;
Default:
Context: main

Changes the limit on the largest size of a core file ( RLIMIT_CORE ) for worker processes. Used to increase the limit without restarting the main process.

Syntax: worker_rlimit_nofile number ;
Default:
Context: main

Changes the limit on the maximum number of open files ( RLIMIT_NOFILE ) for worker processes. Used to increase the limit without restarting the main process.

Syntax: worker_shutdown_timeout time ;
Default:
Context: main

This directive appeared in version 1.11.11.

Configures a timeout for a graceful shutdown of worker processes. When the time expires, nginx will try to close all the connections currently open to facilitate shutdown.

Syntax: working_directory directory ;
Default:
Context: main

Defines the current working directory for a worker process. It is primarily used when writing a core-file, in which case a worker process should have write permission for the specified directory.

Источник

Понравилась статья? Поделить с друзьями:
  • Nginx error log json
  • Nginx error log format
  • Nginx 408 error
  • Nginx 400 ошибка
  • Nginx error log docker