Модуль ngx_http_core_module
- Директивы
- absolute_redirect
- aio
- aio_write
- alias
- auth_delay
- chunked_transfer_encoding
- client_body_buffer_size
- client_body_in_file_only
- client_body_in_single_buffer
- client_body_temp_path
- client_body_timeout
- client_header_buffer_size
- client_header_timeout
- client_max_body_size
- connection_pool_size
- default_type
- directio
- directio_alignment
- disable_symlinks
- early_hints
- error_log_tag
- error_page
- etag
- http
- if_modified_since
- ignore_invalid_headers
- internal
- keepalive_disable
- keepalive_min_timeout
- keepalive_requests
- keepalive_time
- keepalive_timeout
- large_client_header_buffers
- limit_except
- limit_rate
- limit_rate_after
- lingering_close
- lingering_time
- lingering_timeout
- listen
- location
- log_not_found
- log_subrequest
- max_headers
- max_ranges
- merge_slashes
- msie_padding
- msie_refresh
- open_file_cache
- open_file_cache_errors
- open_file_cache_min_uses
- open_file_cache_valid
- output_buffers
- port_in_redirect
- postpone_output
- read_ahead
- recursive_error_pages
- request_pool_size
- reset_timedout_connection
- resolver
- resolver_timeout
- root
- satisfy
- send_lowat
- send_timeout
- sendfile
- sendfile_max_chunk
- server
- server_name
- server_name_in_redirect
- server_names_hash_bucket_size
- server_names_hash_max_size
- server_tokens
- subrequest_output_buffer_size
- tcp_nodelay
- tcp_nopush
- try_files
- types
- types_hash_bucket_size
- types_hash_max_size
- underscores_in_headers
- variables_hash_bucket_size
- variables_hash_max_size
- Встроенные переменные
Директивы
| Синтаксис: | absolute_redirect on | off; |
|---|---|
| По умолчанию: | absolute_redirect on; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.11.8.
Если отключено, перенаправления, выполняемые nginx, будут относительными.
См. также директивы server_name_in_redirect и port_in_redirect.
| Синтаксис: | aio
on |
off |
threads[=pool]; |
|---|---|
| По умолчанию: | aio off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.8.11.
Включает или отключает использование асинхронного ввода-вывода файлов (AIO) во FreeBSD и Linux:
location /video/ {
aio on;
output_buffers 1 64k;
}
Во FreeBSD AIO можно использовать начиная с FreeBSD 4.3. До FreeBSD 11.0 AIO можно либо статически включить в ядро:
options VFS_AIO
либо динамически загрузить в виде загружаемого модуля ядра:
kldload aio
В Linux AIO можно использовать начиная с версии ядра 2.6.22. Кроме того, необходимо включить directio, иначе чтение будет блокирующим:
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
В Linux directio можно использовать только для чтения блоков, выровненных по границе 512 байт (или 4K для XFS). Невыровненный конец файла читается в блокирующем режиме. То же относится к запросам диапазона байтов и запросам FLV, начинающимся не с начала файла: чтение невыровненных данных в начале и конце файла будет блокирующим.
Когда в Linux включены и AIO, и sendfile, AIO используется для файлов размером не меньше значения, указанного в директиве directio, а sendfile — для файлов меньшего размера или при отключённом directio.
location /video/ {
sendfile on;
aio on;
directio 8m;
}
Наконец, файлы можно читать и отправлять с использованием многопоточности (1.7.11), не блокируя рабочий процесс:
location /video/ {
sendfile on;
aio threads;
}
Операции чтения и отправки файлов выполняются потоками указанного пула. Если имя пула не задано, используется пул с именем «default». Имя пула также можно задать с помощью переменных:
aio threads=pool$disk;
По умолчанию многопоточность отключена; её следует включить параметром конфигурации --with-threads. В настоящее время многопоточность совместима только с методами epoll, kqueue и eventport. Многопоточная отправка файлов поддерживается только в Linux.
См. также директиву sendfile.
| Синтаксис: | aio_write on | off; |
|---|---|
| По умолчанию: | aio_write off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.9.13.
Если aio включена, задаёт, используется ли она для записи файлов. В настоящее время это работает только при использовании aio threads и ограничено записью временных файлов с данными, полученными от проксируемых серверов.
| Синтаксис: | alias path; |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Задаёт замену для указанного местоположения. Например, при следующей конфигурации
location /i/ {
alias /data/w3/images/;
}
при запросе «/i/top.gif» будет отправлен файл /data/w3/images/top.gif.
Значение path может содержать переменные, кроме $document_root и $realpath_root.
Если alias используется внутри местоположения, заданного регулярным выражением, это регулярное выражение должно содержать захватываемые группы, а alias должно ссылаться на эти группы (0.7.40), например:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
Если местоположение соответствует последней части значения директивы:
location /images/ {
alias /data/w3/images/;
}
лучше использовать директиву root:
location /images/ {
root /data/w3;
}
| Синтаксис: | auth_delay time; |
|---|---|
| По умолчанию: | auth_delay 0s; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.17.10.
Задерживает обработку неавторизованных запросов с кодом ответа 401, чтобы предотвратить атаки по времени, когда доступ ограничен паролем, результатом подзапроса или JWT.
| Синтаксис: | chunked_transfer_encoding on | off; |
|---|---|
| По умолчанию: | chunked_transfer_encoding on; |
| Контекст: | http, server, location |
Позволяет отключить передачу с чанковым кодированием в HTTP/1.1. Это может быть полезно при использовании программного обеспечения, которое не поддерживает чанковое кодирование, несмотря на требования стандарта.
| Синтаксис: | client_body_buffer_size size; |
|---|---|
| По умолчанию: | client_body_buffer_size 8k|16k; |
| Контекст: | http, server, location |
Задаёт размер буфера для чтения тела запроса клиента. Если тело запроса больше буфера, всё тело или его часть записывается во временный файл. По умолчанию размер буфера равен двум страницам памяти. Это 8K на x86, других 32-разрядных платформах и x86-64. На других 64-разрядных платформах обычно используется 16K.
| Синтаксис: | client_body_in_file_only
on |
clean |
off; |
|---|---|
| По умолчанию: | client_body_in_file_only off; |
| Контекст: | http, server, location |
Определяет, должен ли nginx сохранять всё тело запроса клиента в файл. Эту директиву можно использовать при отладке, при использовании переменной $request_body_file или метода $r->request_body_file модуля ngx_http_perl_module.
При значении on временные файлы не удаляются после обработки запроса.
Значение clean приводит к удалению временных файлов после обработки запроса.
| Синтаксис: | client_body_in_single_buffer on | off; |
|---|---|
| По умолчанию: | client_body_in_single_buffer off; |
| Контекст: | http, server, location |
Определяет, должен ли nginx сохранять всё тело запроса клиента в одном буфере. Эту директиву рекомендуется использовать вместе с переменной $request_body, чтобы сократить число операций копирования.
| Синтаксис: | client_body_temp_path
path
[level1
[level2
[level3]]]; |
|---|---|
| По умолчанию: | client_body_temp_path client_body_temp; |
| Контекст: | http, server, location |
Задаёт каталог для хранения временных файлов с телами запросов клиентов. В указанном каталоге можно использовать иерархию подкаталогов глубиной до трёх уровней. Например, при следующей конфигурации
client_body_temp_path /spool/nginx/client_temp 1 2;
путь к временному файлу может выглядеть так:
/spool/nginx/client_temp/7/45/00000123457
| Синтаксис: | client_body_timeout time; |
|---|---|
| По умолчанию: | client_body_timeout 60s; |
| Контекст: | http, server, location |
Задаёт тайм-аут чтения тела запроса клиента. Тайм-аут применяется только к промежутку между двумя последовательными операциями чтения, а не ко всей передаче тела запроса. Если клиент ничего не передаёт в течение этого времени, запрос завершается ошибкой 408 (Request Time-out).
| Синтаксис: | client_header_buffer_size size; |
|---|---|
| По умолчанию: | client_header_buffer_size 1k; |
| Контекст: | http, server |
Задаёт размер буфера для чтения заголовка запроса клиента. Для большинства запросов достаточно буфера размером 1K. Однако если запрос содержит длинные файлы cookie или поступает от клиента WAP, он может не поместиться в 1K. Если строка запроса или поле заголовка запроса не помещается в этот буфер, выделяются буферы большего размера, настроенные директивой large_client_header_buffers.
Если директива задана на уровне server, может использоваться значение сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | client_header_timeout time; |
|---|---|
| По умолчанию: | client_header_timeout 60s; |
| Контекст: | http, server |
Задаёт тайм-аут чтения заголовка запроса клиента. Если клиент не передаст весь заголовок в течение этого времени, запрос завершается ошибкой 408 (Request Time-out).
| Синтаксис: | client_max_body_size size; |
|---|---|
| По умолчанию: | client_max_body_size 1m; |
| Контекст: | http, server, location |
Задаёт максимально допустимый размер тела запроса клиента. Если размер запроса превышает заданное значение, клиенту возвращается ошибка 413 (Request Entity Too Large). Обратите внимание, что браузеры не могут корректно отображать эту ошибку. Значение size, равное 0, отключает проверку размера тела запроса клиента.
| Синтаксис: | connection_pool_size size; |
|---|---|
| По умолчанию: | connection_pool_size 256|512; |
| Контекст: | http, server |
Позволяет точно настроить выделение памяти для каждого соединения. Эта директива практически не влияет на производительность и обычно не должна использоваться. По умолчанию размер равен 256 байтам на 32-разрядных платформах и 512 байтам на 64-разрядных платформах.
До версии 1.9.8 значение по умолчанию составляло 256 на всех платформах.
| Синтаксис: | default_type mime-type; |
|---|---|
| По умолчанию: | default_type text/plain; |
| Контекст: | http, server, location |
Задаёт тип MIME ответа по умолчанию. Сопоставление расширений имён файлов с типами MIME можно задать директивой types.
| Синтаксис: | directio size | off; |
|---|---|
| По умолчанию: | directio off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.7.7.
Включает использование флага O_DIRECT (FreeBSD, Linux), флага F_NOCACHE (macOS) или функции directio() (Solaris) при чтении файлов размером не меньше указанного значения size. Директива автоматически отключает (0.7.15) использование sendfile для данного запроса. Это может быть полезно при обслуживании больших файлов:
directio 4m;
или при использовании aio в Linux.
| Синтаксис: | directio_alignment size; |
|---|---|
| По умолчанию: | directio_alignment 512; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.8.11.
Задаёт выравнивание для directio. В большинстве случаев достаточно выравнивания по 512 байтам. Однако при использовании XFS в Linux его необходимо увеличить до 4K.
| Синтаксис: | disable_symlinks off;disable_symlinks
on |
if_not_owner
[from=part]; |
|---|---|
| По умолчанию: | disable_symlinks off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.1.15.
Определяет, как следует обрабатывать символические ссылки при открытии файлов:
off- Символические ссылки в пути разрешены и не проверяются. Это поведение используется по умолчанию.
on- Если любой компонент пути является символической ссылкой, доступ к файлу запрещается.
if_not_owner- Доступ к файлу запрещается, если любой компонент пути является символической ссылкой, а владелец ссылки и объекта, на который она указывает, различается.
-
from=part - При проверке символических ссылок (параметры
onиif_not_owner) обычно проверяются все компоненты пути. Проверку символических ссылок в начальной части пути можно пропустить, дополнительно указав параметрfrom=part. В этом случае символические ссылки проверяются только начиная с компонента пути, следующего за указанной начальной частью. Если значение не является начальной частью проверяемого пути, проверяется весь путь, как если бы этот параметр вообще не был задан. Если значение совпадает с полным именем файла, символические ссылки не проверяются. Значение параметра может содержать переменные.
Пример:
disable_symlinks on from=$document_root;
Эта директива доступна только в системах, поддерживающих интерфейсы openat() и fstatat(). К таким системам относятся современные версии FreeBSD, Linux и Solaris.
Параметры on и if_not_owner создают дополнительные накладные расходы при обработке.
В системах, не поддерживающих открытие каталогов только для поиска, для использования этих параметров рабочим процессам необходимы права на чтение всех проверяемых каталогов.
Модули ngx_http_autoindex_module, ngx_http_random_index_module и ngx_http_dav_module в настоящее время игнорируют эту директиву.
| Синтаксис: | early_hints string ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.29.0.
Задаёт условия, при которых ответ 103 (Early Hints) будет передан клиенту. Если хотя бы одно строковое значение не пусто и не равно «0», ответ будет передан:
map $http_sec_fetch_mode $early_hints {
navigate $http2$http3;
}
server {
...
location / {
early_hints $early_hints;
proxy_pass http://example.com;
}
}
Ответы 103 (Early Hints), полученные от вышестоящего сервера, передаются клиенту без изменений и интерпретации.
| Синтаксис: | error_log_tag name value; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.29.8.
Задаёт дополнительную контекстную метку для сообщений HTTP-журнала ошибок в текстовом формате или формате JSON в дополнение к меткам по умолчанию. Значение value может содержать текст, переменные или их сочетание:
error_log_tag request_id $request_id;
На одном уровне можно указать несколько директив error_log_tag. Эти директивы наследуются от предыдущего уровня конфигурации только в том случае, если на текущем уровне не определена ни одна директива error_log_tag.
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | error_page
code ...
[=[response]]
uri; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location, if in location |
Задаёт URI, который будет показан для указанных ошибок. Значение uri может содержать переменные.
Пример:
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
Это вызывает внутреннее перенаправление на указанный uri с изменением метода запроса клиента на «GET» (для всех методов, кроме «GET» и «HEAD»).
Кроме того, код ответа можно изменить на другой с помощью синтаксиса «=response», например:
error_page 404 =200 /empty.gif;
Если ошибочный ответ обрабатывается проксируемым сервером или сервером FastCGI/uwsgi/SCGI/gRPC, который может возвращать разные коды ответа (например, 200, 302, 401 или 404), можно ответить кодом, который он возвращает:
error_page 404 = /404.php;
Если при внутреннем перенаправлении URI и метод менять не требуется, обработку ошибки можно передать именованному местоположению:
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
Если обработка uri приводит к ошибке, клиенту возвращается код последней возникшей ошибки. Для обработки ошибок также можно использовать перенаправление URL:
error_page 403 http://example.com/forbidden.html; error_page 404 =301 http://example.com/notfound.html;
В этом случае по умолчанию клиенту возвращается код ответа 302. Его можно изменить только на один из кодов перенаправления (301, 302, 303, 307 и 308).
Код 307 не считался перенаправлением до версий 1.1.16 и 1.0.13.
Код 308 не считался перенаправлением до версии 1.13.0.
Эти директивы наследуются от предыдущего уровня конфигурации только в том случае, если на текущем уровне не определена ни одна директива error_page.
| Синтаксис: | etag on | off; |
|---|---|
| По умолчанию: | etag on; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.3.3.
Включает или отключает автоматическую генерацию поля заголовка ответа «ETag» для статических ресурсов.
| Синтаксис: | http { ... } |
|---|---|
| По умолчанию: | — |
| Контекст: | main |
Задаёт контекст файла конфигурации, в котором указываются директивы HTTP-сервера.
| Синтаксис: | if_modified_since
off |
exact |
before; |
|---|---|
| По умолчанию: | if_modified_since exact; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.7.24.
Определяет, как сравнивать время изменения ответа со временем в поле заголовка запроса «If-Modified-Since»:
off- ответ всегда считается изменённым (0.7.34);
exact- точное совпадение;
before- время изменения ответа меньше или равно времени в поле заголовка запроса «If-Modified-Since».
| Синтаксис: | ignore_invalid_headers on | off; |
|---|---|
| По умолчанию: | ignore_invalid_headers on; |
| Контекст: | http, server |
Определяет, следует ли игнорировать поля заголовка с недопустимыми именами. Допустимые имена состоят из латинских букв, цифр, дефисов и, возможно, символов подчёркивания (в зависимости от директивы underscores_in_headers).
Если директива задана на уровне server, может использоваться значение сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | internal; |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Указывает, что данное местоположение можно использовать только для внутренних запросов. Для внешних запросов возвращается ошибка клиента 404 (Not Found). К внутренним относятся следующие запросы:
- запросы, перенаправленные директивами error_page, index, internal_redirect, random_index и try_files;
- запросы, перенаправленные полем заголовка ответа «X-Accel-Redirect» вышестоящего сервера;
- подзапросы, созданные командой «
include virtual» модуля ngx_http_ssi_module, директивами модуля ngx_http_addition_module, а также директивами auth_request и mirror; - запросы, изменённые директивой rewrite.
Пример:
error_page 404 /404.html;
location = /404.html {
internal;
}
Для предотвращения циклов обработки запроса, которые могут возникнуть при неправильной конфигурации, допускается не более 10 внутренних перенаправлений на запрос. При достижении этого предела возвращается ошибка 500 (Internal Server Error). В таких случаях в журнале ошибок можно увидеть сообщение «rewrite or internal redirection cycle».
| Синтаксис: | keepalive_disable none | browser ...; |
|---|---|
| По умолчанию: | keepalive_disable msie6; |
| Контекст: | http, server, location |
Отключает постоянные соединения с некорректно работающими браузерами. Параметры browser задают, на какие браузеры распространяется действие директивы. Значение msie6 отключает постоянные соединения со старыми версиями MSIE после получения запроса POST. Значение safari отключает постоянные соединения с Safari и похожими на Safari браузерами в macOS и подобных macOS операционных системах. Значение none разрешает постоянные соединения со всеми браузерами.
До версии 1.1.18 значение safari соответствовало всем браузерам Safari и похожим на Safari во всех операционных системах, и постоянные соединения с ними по умолчанию отключались. | Синтаксис: | keepalive_min_timeout timeout; |
|---|---|
| По умолчанию: | keepalive_min_timeout 0; |
| Контекст: | http, server, location |
Директива появилась в версии 1.27.4.
Задаёт время ожидания, в течение которого keep-alive-соединение с клиентом не будет закрыто на стороне сервера, чтобы его можно было использовать повторно или закрыть при корректном завершении рабочих процессов.
| Синтаксис: | keepalive_requests number; |
|---|---|
| По умолчанию: | keepalive_requests 1000; |
| Контекст: | http, server, location |
Директива появилась в версии 0.8.0.
Задаёт максимальное число запросов, которые могут быть обработаны через одно keep-alive-соединение. После обработки максимального числа запросов соединение закрывается.
Периодическое закрытие соединений необходимо для освобождения памяти, выделенной для каждого соединения. Поэтому использование слишком большого максимального числа запросов может привести к чрезмерному потреблению памяти и не рекомендуется.
До версии 1.19.10 значение по умолчанию было равно 100.
| Синтаксис: | keepalive_time time; |
|---|---|
| По умолчанию: | keepalive_time 1h; |
| Контекст: | http, server, location |
Директива появилась в версии 1.19.10.
Ограничивает максимальное время, в течение которого запросы могут обрабатываться через одно keep-alive-соединение. По истечении этого времени соединение закрывается после обработки следующего запроса.
| Синтаксис: | keepalive_timeout
timeout
[header_timeout]; |
|---|---|
| По умолчанию: | keepalive_timeout 75s; |
| Контекст: | http, server, location |
Первый параметр задаёт время ожидания, в течение которого keep-alive-соединение с клиентом остаётся открытым на стороне сервера. Нулевое значение отключает keep-alive-соединения с клиентами. Необязательный второй параметр задаёт значение в поле заголовка ответа “Keep-Alive: timeout=time”. Значения параметров могут различаться.
Поле заголовка “Keep-Alive: timeout=time” распознаётся браузерами Mozilla и Konqueror. MSIE закрывает keep-alive-соединения самостоятельно примерно через 60 секунд.
| Синтаксис: | large_client_header_buffers number size; |
|---|---|
| По умолчанию: | large_client_header_buffers 4 8k; |
| Контекст: | http, server |
Задаёт максимальное number и size буферов, используемых для чтения больших заголовков запросов клиентов. Строка запроса не может превышать размер одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не может превышать размер одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по мере необходимости. По умолчанию размер буфера равен 8 Кбайт. Если после обработки запроса соединение переходит в состояние keep-alive, эти буферы освобождаются.
Если директива задана на уровне server, может использоваться значение из сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | limit_except method ... { ... } |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Ограничивает допустимые методы HTTP внутри location. Параметр method может принимать одно из следующих значений: GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK или PATCH. Разрешение метода GET также разрешает метод HEAD. Доступ к другим методам можно ограничить с помощью директив модулей ngx_http_access_module, ngx_http_auth_basic_module и ngx_http_auth_jwt_module (1.13.10):
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
Обратите внимание, что это ограничит доступ ко всем методам, кроме GET и HEAD.
| Синтаксис: | limit_rate rate; |
|---|---|
| По умолчанию: | limit_rate 0; |
| Контекст: | http, server, location, if in location |
Ограничивает скорость передачи ответа клиенту. Параметр rate задаётся в байтах в секунду. Нулевое значение отключает ограничение скорости. Ограничение задаётся для каждого запроса, поэтому если клиент одновременно откроет два соединения, общая скорость будет вдвое выше заданного ограничения.
Значение параметра может содержать переменные (1.17.0). Это может быть полезно, если скорость необходимо ограничивать в зависимости от определённого условия:
map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
Ограничение скорости также можно задать в переменной $limit_rate, однако начиная с версии 1.17.0 этот способ не рекомендуется:
server {
if ($slow) {
set $limit_rate 4k;
}
...
}
Ограничение скорости также можно задать в поле заголовка “X-Accel-Limit-Rate” ответа проксируемого сервера. Эту возможность можно отключить с помощью директив proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers и scgi_ignore_headers.
| Синтаксис: | limit_rate_after size; |
|---|---|
| По умолчанию: | limit_rate_after 0; |
| Контекст: | http, server, location, if in location |
Директива появилась в версии 0.8.0.
Задаёт начальный объём данных, после передачи которого скорость дальнейшей передачи ответа клиенту будет ограничена. Значение параметра может содержать переменные (1.17.0).
Пример:
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
| Синтаксис: | lingering_close
off |
on |
always; |
|---|---|
| По умолчанию: | lingering_close on; |
| Контекст: | http, server, location |
Директива появилась в версиях 1.1.0 и 1.0.6.
Управляет тем, как nginx закрывает соединения с клиентами.
Значение по умолчанию “on” указывает nginx ожидать и обрабатывать дополнительные данные от клиента перед окончательным закрытием соединения, но только если эвристические методы предполагают, что клиент может отправлять ещё данные.
Значение “always” заставляет nginx безусловно ожидать дополнительные данные от клиента и обрабатывать их.
Значение “off” указывает nginx никогда не ожидать дополнительные данные и немедленно закрывать соединение. Такое поведение нарушает протокол, поэтому в обычных условиях его не следует использовать.
Чтобы управлять закрытием соединений HTTP/2, директиву необходимо задать на уровне server (1.19.1).
| Синтаксис: | lingering_time time; |
|---|---|
| По умолчанию: | lingering_time 30s; |
| Контекст: | http, server, location |
Если действует директива lingering_close, эта директива задаёт максимальное время, в течение которого nginx будет обрабатывать (читать и игнорировать) дополнительные данные, поступающие от клиента. По истечении этого времени соединение будет закрыто, даже если поступят новые данные.
| Синтаксис: | lingering_timeout time; |
|---|---|
| По умолчанию: | lingering_timeout 5s; |
| Контекст: | http, server, location |
Если действует директива lingering_close, эта директива задаёт максимальное время ожидания поступления новых данных от клиента. Если данные не поступят за это время, соединение закрывается. В противном случае данные считываются и игнорируются, а nginx снова начинает ждать новые данные. Цикл «ожидание — чтение — игнорирование» повторяется, но не дольше времени, заданного директивой lingering_time.
| Синтаксис: | listen
address[:port]
[default_server]
[ssl]
[http2 |
quic]
[proxy_protocol]
[setfib=number]
[fastopen=number]
[backlog=number]
[rcvbuf=size]
[sndbuf=size]
[accept_filter=filter]
[deferred]
[bind]
[ipv6only=on|off]
[reuseport]
[multipath]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];listen
port
[default_server]
[ssl]
[http2 |
quic]
[proxy_protocol]
[setfib=number]
[fastopen=number]
[backlog=number]
[rcvbuf=size]
[sndbuf=size]
[accept_filter=filter]
[deferred]
[bind]
[ipv6only=on|off]
[reuseport]
[multipath]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];listen
unix:path
[default_server]
[ssl]
[http2 |
quic]
[proxy_protocol]
[backlog=number]
[rcvbuf=size]
[sndbuf=size]
[accept_filter=filter]
[deferred]
[bind]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; |
|---|---|
| По умолчанию: | listen *:80 | *:8000; |
| Контекст: | server |
Задаёт address и port для IP-адреса или path для UNIX-сокета, на котором сервер будет принимать запросы. Можно задать как address и port, так и только address или только port. address также может быть именем хоста, например:
listen 127.0.0.1:8000; listen 127.0.0.1; listen 8000; listen *:8000; listen localhost:8000;
Адреса IPv6 (0.7.36) задаются в квадратных скобках:
listen [::]:8000; listen [::1];
UNIX-сокеты (0.8.21) задаются с префиксом “unix:”:
listen unix:/var/run/nginx.sock;
Если задан только address, используется порт 80.
Если директива отсутствует, используется либо *:80, если nginx запущен с привилегиями суперпользователя, либо *:8000 в противном случае.
Параметр default_server, если он задан, делает сервер сервером по умолчанию для указанной пары address:port. Если ни в одной из директив не задан параметр default_server, сервер с первой парой address:port будет сервером по умолчанию для этой пары.
В версиях до 0.8.21 этот параметр назывался просто default. Параметр ssl (0.7.14) указывает, что все соединения, принимаемые на этом порту, должны работать в режиме SSL. Это позволяет сделать конфигурацию сервера, обрабатывающего запросы HTTP и HTTPS, более компактной (конфигурация).
Параметр http2 (1.9.5) настраивает порт для приёма соединений HTTP/2. Обычно для этого также необходимо задать параметр ssl, но nginx можно настроить и для приёма соединений HTTP/2 без SSL.
Параметр устарел, вместо него следует использовать директиву http2.
Параметр quic (1.25.0) настраивает порт для приёма соединений QUIC.
Параметр proxy_protocol (1.5.12) указывает, что все соединения, принимаемые на этом порту, должны использовать протокол PROXY.
Версия 2 протокола PROXY поддерживается начиная с версии 1.13.11.
Директива listen может иметь несколько дополнительных параметров, связанных с системными вызовами для работы с сокетами. Эти параметры можно указывать в любой директиве listen, но только один раз для заданной пары address:port.
В версиях до 0.8.21 их можно было задавать только в директивеlistenвместе с параметромdefault.
-
setfib=number - этот параметр (0.8.44) задаёт связанную таблицу маршрутизации FIB (параметр
SO_SETFIB) для слушающего сокета. В настоящее время это работает только в FreeBSD. -
fastopen=number - включает «TCP Fast Open» для слушающего сокета (1.5.8) и ограничивает максимальную длину очереди соединений, для которых ещё не завершено трёхстороннее рукопожатие.
Не включайте эту функцию, если сервер не способен обрабатывать получение одного и того же пакета SYN с данными более одного раза.
-
backlog=number - задаёт параметр
backlogв вызовеlisten(), который ограничивает максимальную длину очереди ожидающих соединений. По умолчаниюbacklogравно -1 в FreeBSD, DragonFly BSD и macOS и 511 на других платформах. -
rcvbuf=size - задаёт размер буфера приёма (параметр
SO_RCVBUF) для слушающего сокета. -
sndbuf=size - задаёт размер буфера отправки (параметр
SO_SNDBUF) для слушающего сокета. -
accept_filter=filter - задаёт имя фильтра accept (параметр
SO_ACCEPTFILTER) для слушающего сокета, который фильтрует входящие соединения перед передачей их вaccept(). Работает только в FreeBSD и NetBSD 5.0+. Возможные значения: dataready и httpready. -
deferred - указывает использовать отложенный
accept()(параметр сокетаTCP_DEFER_ACCEPT) в Linux. -
bind - указывает выполнять отдельный вызов
bind()для заданной парыaddress:port. Это полезно, поскольку если есть несколько директивlistenс одинаковым портом, но разными адресами, и одна из директивlistenпрослушивает все адреса заданного порта (*:port), nginx будетbind()только для*:port. Следует учитывать, что в этом случае для определения адреса, принявшего соединение, будет выполнен системный вызовgetsockname(). Если используются параметрыsetfib,fastopen,backlog,rcvbuf,sndbuf,accept_filter,deferred,ipv6only,reuseport,multipathилиso_keepalive, для заданной парыaddress:portвсегда будет выполняться отдельный вызовbind(). -
ipv6only=on|off - этот параметр (0.7.42) определяет с помощью параметра сокета
IPV6_V6ONLY, будет ли слушающий сокет IPv6 с адресом-шаблоном[::]принимать только соединения IPv6 или и соединения IPv6, и IPv4. По умолчанию этот параметр включён. Его можно задать только один раз при запуске.До версии 1.3.4, если этот параметр не указывался, для сокета действовали настройки операционной системы.
-
reuseport - этот параметр (1.9.1) указывает создавать отдельный слушающий сокет для каждого рабочего процесса (с использованием параметра сокета
SO_REUSEPORTв Linux 3.9+ и DragonFly BSD илиSO_REUSEPORT_LBв FreeBSD 12+), что позволяет ядру распределять входящие соединения между рабочими процессами. В настоящее время это работает только в Linux 3.9+, DragonFly BSD и FreeBSD 12+ (1.15.1).Неправильное использование этого параметра может иметь последствия для безопасности (подробнее).
-
multipath - этот параметр (1.29.7) настраивает протокол Multipath TCP (
IPPROTO_MPTCP) для слушающего сокета. В настоящее время это работает только в Linux 5.6+.Добавление или удаление этого параметра также включает параметр сокета
SO_REUSEPORT, что может иметь последствия для безопасности (подробнее). -
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt] - этот параметр (1.1.11) настраивает поведение «TCP keepalive» для слушающего сокета. Если параметр не задан, для сокета действуют настройки операционной системы. Если ему присвоено значение “
on”, для сокета включается параметрSO_KEEPALIVE. Если ему присвоено значение “off”, параметрSO_KEEPALIVEдля сокета отключается. Некоторые операционные системы поддерживают настройку параметров TCP keepalive отдельно для каждого сокета с помощью параметров сокетаTCP_KEEPIDLE,TCP_KEEPINTVLиTCP_KEEPCNT. В таких системах (в настоящее время это Linux, NetBSD, Dragonfly, FreeBSD и macOS) их можно настроить с помощью параметровkeepidle,keepintvlиkeepcnt. Один или два параметра можно опустить; в этом случае для соответствующего параметра сокета будет использоваться системное значение по умолчанию. Например,so_keepalive=30m::10
задаст время ожидания простоя (TCP_KEEPIDLE) равным 30 минутам, оставит интервал между проверками (TCP_KEEPINTVL) равным системному значению по умолчанию и задаст число проверок (TCP_KEEPCNT) равным 10.
Пример:
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
| Синтаксис: | location [
= |
~ |
~* |
^~
] uri { ... }location @name { ... } |
|---|---|
| По умолчанию: | — |
| Контекст: | server, location |
Задаёт конфигурацию в зависимости от URI запроса.
Сопоставление выполняется с нормализованным URI после декодирования текста в формате “%XX”, разрешения ссылок на относительные компоненты пути “.” и “..” и, возможно, объединения двух или более соседних косых черт в одну.
location может быть задана строкой-префиксом или регулярным выражением. Регулярные выражения указываются с модификатором “~*” перед выражением (для поиска без учёта регистра) или с модификатором “~” (для поиска с учётом регистра). Чтобы найти location, соответствующую заданному запросу, nginx сначала проверяет location, заданные строками-префиксами (префиксные location). Среди них выбирается location с самым длинным совпавшим префиксом и запоминается. Затем проверяются регулярные выражения в порядке их появления в конфигурационном файле. Поиск по регулярным выражениям прекращается при первом совпадении, и используется соответствующая конфигурация. Если совпадений с регулярными выражениями нет, используется ранее запомненная конфигурация префиксной location.
Блоки location можно вкладывать друг в друга, за исключением некоторых случаев, описанных ниже.
В операционных системах без учёта регистра, таких как macOS и Cygwin, при сопоставлении строк-префиксов регистр не учитывается (0.7.7). Однако сравнение ограничено однобайтовыми локалями.
Регулярные выражения могут содержать захватывающие группы (0.7.40), которые впоследствии можно использовать в других директивах.
Если для самой длинной совпавшей префиксной location задан модификатор “^~”, регулярные выражения не проверяются.
Кроме того, с помощью модификатора “=” можно задать точное совпадение URI и location. Если точное совпадение найдено, поиск прекращается. Например, если часто поступают запросы “/”, определение “location = /” ускорит их обработку, поскольку поиск завершится сразу после первого сравнения. Очевидно, такая location не может содержать вложенные location.
В версиях с 0.7.1 по 0.8.41, если запрос соответствовал префиксной location без модификаторов “=” и “^~”, поиск также прекращался и регулярные выражения не проверялись.
Рассмотрим пример:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
Запрос “/” будет соответствовать конфигурации A, запрос “/index.html” — конфигурации B, запрос “/documents/document.html” — конфигурации C, запрос “/images/1.gif” — конфигурации D, а запрос “/documents/1.jpg” — конфигурации E.
Префикс “@” определяет именованную location. Такая location не используется для обработки обычных запросов, а применяется для перенаправления запросов. Именованные location нельзя вкладывать друг в друга, и они не могут содержать вложенные location.
Если location задана строкой-префиксом, оканчивающейся символом косой черты, а запросы обрабатываются одной из директив proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass или grpc_pass, выполняется специальная обработка. В ответ на запрос с URI, совпадающим с этой строкой, но без завершающей косой черты, возвращается постоянное перенаправление с кодом 301 на запрошенный URI с добавленной косой чертой. Если это нежелательно, можно задать точное совпадение URI и location следующим образом:
location /user/ {
proxy_pass http://user.example.com;
}
location = /user {
proxy_pass http://login.example.com;
}
| Синтаксис: | log_not_found on | off; |
|---|---|
| По умолчанию: | log_not_found on; |
| Контекст: | http, server, location |
Включает или отключает запись в error_log ошибок, связанных с отсутствием файлов.
| Синтаксис: | log_subrequest on | off; |
|---|---|
| По умолчанию: | log_subrequest off; |
| Контекст: | http, server, location |
Включает или отключает запись подзапросов в access_log.
| Синтаксис: | max_headers number; |
|---|---|
| По умолчанию: | max_headers 1000; |
| Контекст: | http, server |
Директива появилась в версии 1.29.8.
Задаёт максимально допустимое число строк заголовка в запросах. При достижении этого ограничения возвращается ошибка 400 (Bad Request).
| Синтаксис: | max_ranges number; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Директива появилась в версии 1.1.2.
Ограничивает максимально допустимое число диапазонов в запросах с диапазонами байтов. Запросы, превышающие это ограничение, обрабатываются так, как если бы диапазоны байтов не были заданы. По умолчанию число диапазонов не ограничено. Нулевое значение полностью отключает поддержку диапазонов байтов.
| Синтаксис: | merge_slashes on | off; |
|---|---|
| По умолчанию: | merge_slashes on; |
| Контекст: | http, server |
Включает или отключает объединение двух или более соседних косых черт в URI в одну.
Обратите внимание, что объединение необходимо для корректного сопоставления строк-префиксов и регулярных выражений с location. Без него запрос “//scripts/one.php” не будет соответствовать
location /scripts/ {
...
}
и может быть обработан как статический файл. Поэтому он преобразуется в “/scripts/one.php”.
Отключение объединения off может потребоваться, если URI содержит имена, закодированные в base64, поскольку в base64 символ “/” используется внутри строк. Однако из соображений безопасности отключать объединение не рекомендуется.
Если директива задана на уровне server, может использоваться значение из сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | msie_padding on | off; |
|---|---|
| По умолчанию: | msie_padding on; |
| Контекст: | http, server, location |
Включает или отключает добавление комментариев в ответы клиентам MSIE с кодом состояния выше 400, чтобы увеличить размер ответа до 512 байт.
| Синтаксис: | msie_refresh on | off; |
|---|---|
| По умолчанию: | msie_refresh off; |
| Контекст: | http, server, location |
Включает или отключает отправку обновлений вместо перенаправлений для клиентов MSIE.
| Синтаксис: | open_file_cache off;open_file_cache
max=N
[inactive=time]; |
|---|---|
| По умолчанию: | open_file_cache off; |
| Контекст: | http, server, location |
Настраивает кэш, в котором могут храниться:
- дескрипторы открытых файлов, их размеры и время изменения;
- сведения о существовании каталогов;
- ошибки поиска файлов, например «файл не найден», «нет разрешения на чтение» и т. п.
Кэширование ошибок необходимо отдельно включить директивой open_file_cache_errors.
Директива принимает следующие параметры:
-
max - задаёт максимальное число элементов в кэше; при переполнении кэша удаляются наименее недавно использовавшиеся элементы (LRU);
-
inactive - задаёт время, по истечении которого элемент удаляется из кэша, если за это время к нему не обращались; по умолчанию — 60 секунд;
-
off - отключает кэш.
Пример:
open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
| Синтаксис: | open_file_cache_errors on | off; |
|---|---|
| По умолчанию: | open_file_cache_errors off; |
| Контекст: | http, server, location |
Включает или отключает кэширование ошибок поиска файлов директивой open_file_cache.
| Синтаксис: | open_file_cache_min_uses number; |
|---|---|
| По умолчанию: | open_file_cache_min_uses 1; |
| Контекст: | http, server, location |
Задаёт минимальное number обращений к файлу за период, настроенный параметром inactive директивы open_file_cache, необходимое для сохранения дескриптора файла открытым в кэше.
| Синтаксис: | open_file_cache_valid time; |
|---|---|
| По умолчанию: | open_file_cache_valid 60s; |
| Контекст: | http, server, location |
Задаёт время, по истечении которого необходимо проверять элементы open_file_cache.
| Синтаксис: | output_buffers number size; |
|---|---|
| Значение по умолчанию: | output_buffers 2 32k; |
| Контекст: | http, server, location |
Задает number и size буферов, используемых для чтения ответа с диска.
До версии 1.9.5 значением по умолчанию было 1 32k.
| Синтаксис: | port_in_redirect on | off; |
|---|---|
| Значение по умолчанию: | port_in_redirect on; |
| Контекст: | http, server, location |
Включает или отключает указание порта в абсолютных перенаправлениях, которые выдает nginx.
Использование основного имени сервера в перенаправлениях контролируется директивой server_name_in_redirect.
| Синтаксис: | postpone_output size; |
|---|---|
| Значение по умолчанию: | postpone_output 1460; |
| Контекст: | http, server, location |
По возможности передача данных клиенту откладывается до тех пор, пока у nginx не будет не менее size байт данных для отправки. Нулевое значение отключает отложенную передачу данных.
| Синтаксис: | read_ahead size; |
|---|---|
| Значение по умолчанию: | read_ahead 0; |
| Контекст: | http, server, location |
Задает объем предварительного чтения ядром при работе с файлом.
В Linux используется системный вызов posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL), поэтому параметр size игнорируется.
Во FreeBSD используется системный вызов fcntl(O_READAHEAD, size), поддерживаемый начиная с FreeBSD 9.0-CURRENT. Для FreeBSD 7 требуется патч.
| Синтаксис: | recursive_error_pages on | off; |
|---|---|
| Значение по умолчанию: | recursive_error_pages off; |
| Контекст: | http, server, location |
Включает или отключает выполнение нескольких перенаправлений с помощью директивы error_page. Количество таких перенаправлений ограничено.
| Синтаксис: | request_pool_size size; |
|---|---|
| Значение по умолчанию: | request_pool_size 4k; |
| Контекст: | http, server |
Позволяет точно настраивать выделение памяти для каждого запроса. Эта директива оказывает минимальное влияние на производительность и обычно не должна использоваться.
| Синтаксис: | reset_timedout_connection on | off; |
|---|---|
| Значение по умолчанию: | reset_timedout_connection off; |
| Контекст: | http, server, location |
Включает или отключает сброс соединений, время ожидания которых истекло, а также соединений, закрытых нестандартным кодом 444 (1.15.2). Сброс выполняется следующим образом. Перед закрытием сокета для него устанавливается опция SO_LINGER со значением тайм-аута 0. При закрытии сокета клиенту отправляется TCP RST, а вся память, занятая этим сокетом, освобождается. Это позволяет избежать длительного нахождения уже закрытого сокета с заполненными буферами в состоянии FIN_WAIT1.
Следует отметить, что keep-alive-соединения, время ожидания которых истекло, закрываются обычным образом.
| Синтаксис: | resolver
address ...
[valid=time]
[ipv4=on|off]
[ipv6=on|off]
[status_zone=zone]; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Настраивает серверы имен, используемые для преобразования имен серверов вышестоящих групп в адреса, например:
resolver 127.0.0.1 [::1]:5353;
Адрес можно указать в виде доменного имени или IP-адреса, с необязательным указанием порта (1.3.1, 1.2.2). Если порт не указан, используется порт 53. Запросы к серверам имен выполняются по круговому алгоритму.
До версии 1.1.7 можно было настроить только один сервер имен. Указание серверов имен с помощью IPv6-адресов поддерживается начиная с версий 1.3.1 и 1.2.2.
По умолчанию при разрешении имен nginx ищет адреса IPv4 и IPv6. Если поиск адресов IPv4 или IPv6 не требуется, можно указать параметр ipv4=off (1.23.1) или ipv6=off.
Разрешение имен в IPv6-адреса поддерживается начиная с версии 1.5.8.
По умолчанию nginx кэширует ответы, используя значение TTL из ответа. Необязательный параметр valid позволяет переопределить это значение:
resolver 127.0.0.1 [::1]:5353 valid=30s;
До версии 1.1.9 настроить время кэширования было невозможно, и nginx всегда кэшировал ответы в течение 5 минут.
Чтобы предотвратить DNS-спуфинг, рекомендуется настраивать DNS-серверы в надлежащим образом защищенной доверенной локальной сети.
Необязательный параметр status_zone (1.17.1) включает сбор статистики запросов и ответов DNS-сервера в указанной zone. Этот параметр доступен в рамках нашей коммерческой подписки.
| Синтаксис: | resolver_timeout time; |
|---|---|
| Значение по умолчанию: | resolver_timeout 30s; |
| Контекст: | http, server, location |
Задает тайм-аут разрешения имен, например:
resolver_timeout 5s;
| Синтаксис: | root path; |
|---|---|
| Значение по умолчанию: | root html; |
| Контекст: | http, server, location, if in location |
Задает корневой каталог для запросов. Например, при следующей конфигурации
location /i/ {
root /data/w3;
}
В ответ на запрос «/i/top.gif» будет отправлен файл /data/w3/i/top.gif.
Значение path может содержать переменные, кроме $document_root и $realpath_root.
Путь к файлу формируется простым добавлением URI к значению директивы root. Если URI необходимо изменить, следует использовать директиву alias.
| Синтаксис: | satisfy all | any; |
|---|---|
| Значение по умолчанию: | satisfy all; |
| Контекст: | http, server, location |
Разрешает доступ, если все модули (all) или хотя бы один модуль (any) из ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module, ngx_http_auth_jwt_module (1.13.10) или ngx_http_auth_oidc_module (1.27.4) разрешает доступ.
Пример:
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
| Синтаксис: | send_lowat size; |
|---|---|
| Значение по умолчанию: | send_lowat 0; |
| Контекст: | http, server, location |
Если директиве задано ненулевое значение, nginx попытается минимизировать количество операций отправки в клиентские сокеты, используя либо флаг NOTE_LOWAT метода kqueue, либо параметр сокета SO_SNDLOWAT. В обоих случаях используется указанное значение size.
Эта директива игнорируется в Linux, Solaris и Windows.
| Синтаксис: | send_timeout time; |
|---|---|
| Значение по умолчанию: | send_timeout 60s; |
| Контекст: | http, server, location |
Задает тайм-аут передачи ответа клиенту. Тайм-аут задается только между двумя последовательными операциями записи, а не для передачи всего ответа целиком. Если клиент не получает данных в течение этого времени, соединение закрывается.
| Синтаксис: | sendfile on | off; |
|---|---|
| Значение по умолчанию: | sendfile off; |
| Контекст: | http, server, location, if in location |
Включает или отключает использование sendfile().
Начиная с nginx 0.8.12 и FreeBSD 5.2.1, для предварительной загрузки данных можно использовать aio для sendfile():
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
В этой конфигурации sendfile() вызывается с флагом SF_NODISKIO, который не позволяет ему блокироваться при вводе-выводе на диске, а вместо этого сообщает, что данных нет в памяти. Затем nginx инициирует асинхронную загрузку данных, считывая один байт. При первом чтении ядро FreeBSD загружает в память первые 128K байт файла, а при последующих чтениях загружает данные порциями по 16K. Это можно изменить с помощью директивы read_ahead.
До версии 1.7.11 предварительную загрузку можно было включить с помощью aio sendfile;. | Синтаксис: | sendfile_max_chunk size; |
|---|---|
| Значение по умолчанию: | sendfile_max_chunk 2m; |
| Контекст: | http, server, location |
Ограничивает объем данных, который может быть передан за один вызов sendfile(). Без этого ограничения одно быстрое соединение может полностью занять рабочий процесс.
До версии 1.21.4 ограничение по умолчанию отсутствовало.
| Синтаксис: | server { ... } |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http |
Задает конфигурацию виртуального сервера. Четкого разделения между виртуальными серверами, основанными на IP-адресе, и виртуальными серверами, основанными на имени (заголовке запроса «Host»), нет. Вместо этого директивы listen описывают все адреса и порты, на которых сервер должен принимать соединения, а директива server_name перечисляет все имена серверов. Примеры конфигураций приведены в документе «Как nginx обрабатывает запрос».
| Синтаксис: | server_name name ...; |
|---|---|
| Значение по умолчанию: | server_name ""; |
| Контекст: | server |
Задает имена виртуального сервера, например:
server {
server_name example.com www.example.com;
}
Первое имя становится основным именем сервера.
В именах серверов можно использовать звездочку («*») вместо первой или последней части имени:
server {
server_name example.com *.example.com www.example.*;
}
Такие имена называются именами с подстановочными знаками.
Первые два из указанных выше вариантов можно объединить в один:
server {
server_name .example.com;
}
В именах серверов также можно использовать регулярные выражения, поставив перед именем тильду («~»):
server {
server_name www.example.com ~^www\d+\.example\.com$;
}
Регулярные выражения могут содержать захватывающие группы (0.7.40), которые впоследствии можно использовать в других директивах:
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
Именованные захватывающие группы в регулярных выражениях создают переменные (0.8.25), которые впоследствии можно использовать в других директивах:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
Если параметру директивы задано значение «$hostname» (0.9.4), будет подставлено имя хоста компьютера.
Также можно указать пустое имя сервера (0.7.11):
server {
server_name www.example.com "";
}
Это позволяет данному серверу обрабатывать запросы без поля заголовка «Host» — вместо сервера по умолчанию — для заданной пары адрес:порт. Это значение используется по умолчанию.
До версии 0.8.48 по умолчанию использовалось имя хоста компьютера.
Поиск выполняется в следующем порядке приоритета и прекращается при первом совпадении:
- точное имя
- самое длинное имя с подстановочным знаком в начале, например «
*.example.com» - самое длинное имя с подстановочным знаком в конце, например «
mail.*» - первое совпавшее регулярное выражение (в порядке появления в файле конфигурации)
Подробное описание имен серверов приведено в отдельном документе Имена серверов.
| Синтаксис: | server_name_in_redirect on | off; |
|---|---|
| Значение по умолчанию: | server_name_in_redirect off; |
| Контекст: | http, server, location |
Включает или отключает использование основного имени сервера, заданного директивой server_name, в абсолютных перенаправлениях, которые выдает nginx. Если использование основного имени сервера отключено, используется имя из поля заголовка запроса «Host». Если это поле отсутствует, используется IP-адрес сервера.
Использование порта в перенаправлениях контролируется директивой port_in_redirect.
| Синтаксис: | server_names_hash_bucket_size size; |
|---|---|
| Значение по умолчанию: | server_names_hash_bucket_size 32|64|128; |
| Контекст: | http |
Задает размер сегмента хеш-таблиц имен серверов. Значение по умолчанию зависит от размера строки кэша процессора. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
| Синтаксис: | server_names_hash_max_size size; |
|---|---|
| Значение по умолчанию: | server_names_hash_max_size 512; |
| Контекст: | http |
Задает максимальный size хеш-таблиц имен серверов. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
| Синтаксис: | server_tokens
on |
off |
build |
string; |
|---|---|
| Значение по умолчанию: | server_tokens on; |
| Контекст: | http, server, location |
Включает или отключает вывод версии nginx на страницах ошибок и в поле заголовка ответа «Server».
Параметр build (1.11.10) включает вывод имени сборки вместе с версией nginx.
Кроме того, в рамках нашей коммерческой подписки, начиная с версии 1.9.13, подпись на страницах ошибок и значение поля заголовка ответа «Server» можно явно задать с помощью string с переменными. Пустая строка отключает вывод поля «Server».
| Синтаксис: | subrequest_output_buffer_size size; |
|---|---|
| Значение по умолчанию: | subrequest_output_buffer_size 4k|8k; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.13.10.
Задает size буфера, используемого для хранения тела ответа подзапроса. По умолчанию размер буфера равен размеру одной страницы памяти. В зависимости от платформы это 4K или 8K. При необходимости его можно уменьшить.
Директива применима только к подзапросам, тела ответов которых сохраняются в памяти. Например, такие подзапросы создаются с помощью SSI.
| Синтаксис: | tcp_nodelay on | off; |
|---|---|
| Значение по умолчанию: | tcp_nodelay on; |
| Контекст: | http, server, location |
Включает или отключает использование параметра TCP_NODELAY. Параметр включается при переходе соединения в состояние keep-alive. Кроме того, он включается для SSL-соединений, при проксировании без буферизации и при проксировании WebSocket.
| Синтаксис: | tcp_nopush on | off; |
|---|---|
| Значение по умолчанию: | tcp_nopush off; |
| Контекст: | http, server, location |
Включает или отключает использование параметра сокета TCP_NOPUSH во FreeBSD или параметра сокета TCP_CORK в Linux. Эти параметры включаются только при использовании sendfile. Включение параметра позволяет
- отправлять заголовок ответа и начало файла в одном пакете в Linux и FreeBSD 4.*;
- отправлять файл целыми пакетами.
| Синтаксис: | try_files file ... uri;try_files file ... =code; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | server, location |
Проверяет существование файлов в указанном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу формируется из параметра file в соответствии с директивами root и alias. Существование каталога можно проверить, указав косую черту в конце имени, например «$uri/». Если ни один файл не найден, выполняется внутреннее перенаправление на uri, указанный последним параметром. Например:
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
Последний параметр также может указывать на именованное местоположение, как показано в примерах ниже. Начиная с версии 0.7.51, последним параметром также может быть code:
location / {
try_files $uri $uri/index.html $uri.html =404;
}
Пример проксирования Mongrel:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Пример для Drupal/FastCGI:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
... other fastcgi_param's
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
... other fastcgi_param's
}
В следующем примере
location / {
try_files $uri $uri/ @drupal;
}
директива try_files эквивалентна
location / {
error_page 404 = @drupal;
log_not_found off;
}
А здесь
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
...
}
try_files проверяет существование PHP-файла перед передачей запроса серверу FastCGI.
Пример для Wordpress и Joomla:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
... other fastcgi_param's
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
... other fastcgi_param's
}
| Синтаксис: | types { ... } |
|---|---|
| Значение по умолчанию: | types {
text/html html;
image/gif gif;
image/jpeg jpg;
} |
| Контекст: | http, server, location |
Сопоставляет расширения файлов с MIME-типами ответов. Регистр букв в расширениях не учитывается. Несколько расширений можно сопоставить одному типу, например:
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
Достаточно полная таблица сопоставлений поставляется вместе с nginx в файле conf/mime.types.
Чтобы для всех запросов в определенном местоположении указывать MIME-тип «application/octet-stream», можно использовать следующую конфигурацию:
location /download/ {
types { }
default_type application/octet-stream;
}
| Синтаксис: | types_hash_bucket_size size; |
|---|---|
| Значение по умолчанию: | types_hash_bucket_size 64; |
| Контекст: | http, server, location |
Задает размер сегмента хеш-таблиц типов. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
До версии 1.5.13 значение по умолчанию зависело от размера строки кэша процессора.
| Синтаксис: | types_hash_max_size size; |
|---|---|
| Значение по умолчанию: | types_hash_max_size 1024; |
| Контекст: | http, server, location |
Задает максимальный size хеш-таблиц типов. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
| Синтаксис: | underscores_in_headers on | off; |
|---|---|
| Значение по умолчанию: | underscores_in_headers off; |
| Контекст: | http, server |
Включает или отключает использование символов подчеркивания в полях заголовка запроса клиента. Если использование символов подчеркивания отключено, поля заголовка запроса, имена которых содержат символы подчеркивания, помечаются как недопустимые и обрабатываются в соответствии с директивой ignore_invalid_headers.
Если директива указана на уровне server, можно использовать значение из сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | variables_hash_bucket_size size; |
|---|---|
| Значение по умолчанию: | variables_hash_bucket_size 64; |
| Контекст: | http |
Задает размер сегмента хеш-таблицы переменных. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
| Синтаксис: | variables_hash_max_size size; |
|---|---|
| Значение по умолчанию: | variables_hash_max_size 1024; |
| Контекст: | http |
Задает максимальный size хеш-таблицы переменных. Подробное описание настройки хеш-таблиц приведено в отдельном документе.
До версии 1.5.13 значением по умолчанию было 512.
Встроенные переменные
Модуль ngx_http_core_module поддерживает встроенные переменные с именами, соответствующими переменным Apache Server. В первую очередь это переменные, представляющие поля заголовка запроса клиента, такие как $http_user_agent, $http_cookie и так далее. Также доступны другие переменные:
-
$arg_name - аргумент
nameв строке запроса $args- аргументы в строке запроса
$binary_remote_addr- адрес клиента в двоичном формате; длина значения всегда составляет 4 байта для адресов IPv4 или 16 байт для адресов IPv6
$body_bytes_sent- количество байтов, отправленных клиенту, без учета заголовка ответа; эта переменная совместима с параметром «
%B» модуля Apachemod_log_config $bytes_sent- количество байтов, отправленных клиенту (1.3.8, 1.2.5)
$connection- порядковый номер соединения (1.3.8, 1.2.5)
$connection_requests- текущее количество запросов, выполненных через соединение (1.3.8, 1.2.5)
$connection_time- время соединения в секундах с точностью до миллисекунд (1.19.10)
$content_length- поле заголовка запроса «Content-Length»
$content_type- поле заголовка запроса «Content-Type»
- cookie
name $document_root- значение директивы root или alias для текущего запроса
$document_uri- то же, что и
$uri $host- в следующем порядке приоритета: имя хоста из строки запроса, имя хоста из поля заголовка запроса «Host» или имя сервера, соответствующее запросу
$hostname- имя хоста
-
$http_name - произвольное поле заголовка запроса; последняя часть имени переменной — это имя поля, преобразованное в нижний регистр, где дефисы заменены символами подчеркивания
$https- «
on», если соединение работает в режиме SSL, иначе пустая строка $is_args- «
?», если строка запроса содержит аргументы, иначе пустая строка $is_request_port- «
:», если $request_port не пустая, иначе пустая строка (1.29.3) $limit_rate- установка этой переменной включает ограничение скорости передачи ответа; см. limit_rate
$msec- текущее время в секундах с точностью до миллисекунд (1.3.9, 1.2.6)
$nginx_version- версия nginx
$pid- PID рабочего процесса
$pipe- «
p», если запрос был конвейерным, иначе «.» (1.3.12, 1.2.7) $proxy_protocol_addr- адрес клиента из заголовка протокола PROXY (1.5.12)
Протокол PROXY необходимо предварительно включить, задав параметр
proxy_protocolв директиве listen. $proxy_protocol_port- порт клиента из заголовка протокола PROXY (1.11.0)
Протокол PROXY необходимо предварительно включить, задав параметр
proxy_protocolв директиве listen. $proxy_protocol_server_addr- адрес сервера из заголовка протокола PROXY (1.17.6)
Протокол PROXY необходимо предварительно включить, задав параметр
proxy_protocolв директиве listen. $proxy_protocol_server_port- порт сервера из заголовка протокола PROXY (1.17.6)
Протокол PROXY необходимо предварительно включить, задав параметр
proxy_protocolв директиве listen. -
$proxy_protocol_tlv_name - TLV из заголовка протокола PROXY (1.23.2).
nameможет быть именем типа TLV или его числовым значением. Во втором случае значение является шестнадцатеричным и должно иметь префикс0x:$proxy_protocol_tlv_alpn $proxy_protocol_tlv_0x01
Доступ к SSL TLV также возможен по имени типа TLV или его числовому значению; в обоих случаях используется префиксssl_:$proxy_protocol_tlv_ssl_version $proxy_protocol_tlv_ssl_0x21
Поддерживаются следующие имена типов TLV:
-
alpn(0x01) — протокол верхнего уровня, используемый для соединения -
authority(0x02) — значение имени хоста, переданное клиентом -
unique_id(0x05) — уникальный идентификатор соединения -
netns(0x30) — имя пространства имен -
ssl(0x20) — двоичная структура SSL TLV
Поддерживаются следующие имена типов SSL TLV:
-
ssl_version(0x21) — версия SSL, используемая в соединении с клиентом -
ssl_cn(0x22) — общее имя сертификата SSL (Common Name) -
ssl_cipher(0x23) — имя используемого шифра -
ssl_sig_alg(0x24) — алгоритм, использованный для подписи сертификата -
ssl_key_alg(0x25) — алгоритм открытого ключа
Также поддерживается следующее специальное имя типа SSL TLV:
-
ssl_verify— результат проверки сертификата SSL клиента:0, если клиент предоставил сертификат и он был успешно проверен, в противном случае — ненулевое значение.
Протокол PROXY необходимо предварительно включить, задав параметр
proxy_protocolв директиве listen. -
$query_string- то же, что и
$args $realpath_root- абсолютный путь, соответствующий значению директивы root или alias для текущего запроса, со всеми символическими ссылками, разрешенными в реальные пути
$remote_addr- адрес клиента
$remote_port- порт клиента
$remote_user- имя пользователя, предоставленное при базовой аутентификации
$request- полная исходная строка запроса
$request_body- тело запроса
Значение переменной доступно в контекстах, обрабатываемых директивами proxy_pass, fastcgi_pass, uwsgi_pass и scgi_pass, если тело запроса было прочитано в буфер памяти.
$request_body_file- имя временного файла с телом запроса
По завершении обработки файл необходимо удалить. Чтобы всегда записывать тело запроса в файл, следует включить client_body_in_file_only. Если имя временного файла передается в проксируемом запросе или запросе к серверу FastCGI/uwsgi/SCGI, передачу тела запроса необходимо отключить соответственно директивами proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off или scgi_pass_request_body off.
$request_completion- «
OK», если запрос завершен, иначе пустая строка $request_filename- путь к файлу для текущего запроса, определяемый директивами root или alias и URI запроса
$request_id- уникальный идентификатор запроса, сгенерированный из 16 случайных байтов и представленный в шестнадцатеричном формате (1.11.0)
$request_length- длина запроса (включая строку запроса, заголовок и тело запроса) (1.3.12, 1.2.7)
$request_method- метод запроса, обычно «
GET» или «POST» $request_port- в следующем порядке приоритета: номер порта из компонента URI authority или номер порта из поля заголовка запроса «Host» (1.29.3)
$request_time- время обработки запроса в секундах с точностью до миллисекунд (1.3.9, 1.2.6); время, прошедшее с момента чтения первых байтов от клиента
$request_uri- полный исходный URI запроса (с аргументами)
$scheme- схема запроса: «
http» или «https» -
$sent_http_name - произвольное поле заголовка ответа; последняя часть имени переменной — это имя поля, преобразованное в нижний регистр, где дефисы заменены символами подчеркивания
-
$sent_trailer_name - произвольное поле, отправленное в конце ответа (1.13.2); последняя часть имени переменной — это имя поля, преобразованное в нижний регистр, где дефисы заменены символами подчеркивания
$server_addr- адрес сервера, принявшего запрос
Для вычисления значения этой переменной обычно требуется один системный вызов. Чтобы избежать системного вызова, в директивах listen необходимо указать адреса и использовать параметр
bind. $server_name- имя сервера, принявшего запрос
$server_port- порт сервера, принявшего запрос
$server_protocol- протокол запроса, обычно «
HTTP/1.0», «HTTP/1.1», «HTTP/2.0» или «HTTP/3.0» $status- статус ответа (1.3.2, 1.2.2)
-
$tcpinfo_rtt,$tcpinfo_rttvar,$tcpinfo_snd_cwnd,$tcpinfo_rcv_space - информация о TCP-соединении с клиентом; доступна в системах, поддерживающих параметр сокета
TCP_INFO $time_iso8601- местное время в формате стандарта ISO 8601 (1.3.12, 1.2.7)
$time_iso8601_ms- местное время в формате стандарта ISO 8601 с точностью до миллисекунд (1.29.8)
Эта переменная доступна в рамках нашей коммерческой подписки.
$time_local- местное время в общепринятом формате журнала (1.3.12, 1.2.7)
$uri- текущий URI запроса, нормализованный
Значение
$uriможет меняться во время обработки запроса, например при внутренних перенаправлениях или использовании индексных файлов.
© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_core_module.html