Модуль ngx_http_core_module
- Директивы
- absolute_redirect
- aio
- aio_write
- alias
- auth_delay
- chunked_transfer_encoding
- размер_буфера_тела_клиента
- только_в_файле_тело_клиента
- тело_клиента_в_одном_буфере
- временный_путь_тела_клиента
- таймаут_тела_клиента
- размер_буфера_заголовков_клиента
- таймаут_заголовков_клиента
- максимальный_размер_тела_клиента
- размер_пула_соединений
- тип_по_умолчанию
- directio
- выравнивание_directio
- отключение_символических_ссылок
- страница_ошибки
- etag
- http
- если_изменено_с_тех_пор
- игнорировать_невалидные_заголовки
- внутренний
- отключить_keep-alive
- количество_keep-alive_запросов
- время_keep-alive
- таймаут_keep-alive
- большие_буферы_заголовков_клиента
- ограничить_исключая
- ограничить_скорость
- ограничить_скорость_после
- задержка_закрытия
- время_задержки
- таймаут_задержки
- listen
- location
- лог_не_найдено
- лог_подзапрос
- максимальное_количество_диапазонов
- слияние_слешей
- msie_padding
- msie_refresh
- кеш_открытых_файлов
- ошибки_кеша_открытых_файлов
- минимальное_использование_кеша_файлов
- действительность_кеша_файлов
- буферы_вывода
- порт_в_перенаправлении
- отложить_вывод
- предварительное_чтение
- рекурсивные_страницы_ошибок
- размер_пула_запросов
- сбросить_таймаут_соединения
- resolver
- таймаут_разрешения
- корень
- удовлетворить
- низкий_уровень_отправки
- таймаут_отправки
- sendfile
- максимальный_размер_куска_sendfile
- сервер
- имя_сервера
- имя_сервера_в_перенаправлении
- размер_ведра_хеша_имен_серверов
- максимальный_размер_хеша_имен_серверов
- токены_сервера
- размер_буфера_вывода_подзапроса
- tcp_nodelay
- tcp_nopush
- попробовать_файлы
- типы
- размер_ведра_хеша_типов
- максимальный_размер_хеша_типов
- нижние_черты_в_заголовках
- размер_ведра_хеша_переменных
- максимальный_размер_хеша_переменных
- Встроенные переменные
Директивы
| Синтаксис: | 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 байт (или 4К для XFS). Невыровненная конечная часть файла читается в блокирующем режиме. То же самое относится к запросам диапазонов байтов и запросам FLV не с начала файла: чтение невыровненных данных в начале и конце файла будет блокирующим.
Когда оба AIO и sendfile включены на Linux, 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 |
Позволяет отключить кодирование chunked transfer в HTTP/1.1. Это может быть полезно при использовании программного обеспечения, не поддерживающего кодирование chunked, несмотря на требования стандарта.
| Синтаксис: | client_body_buffer_size size; |
|---|---|
| По умолчанию: | client_body_buffer_size 8k|16k; |
| Контекст: | http, server, location |
Устанавливает размер буфера для чтения тела запроса клиента. В случае, если тело запроса больше, чем буфер, все тело или только его часть записывается во временный файл . По умолчанию, размер буфера равен двум страницам памяти. Это 8К на x86, других 32-битных платформах и x86-64. Обычно это 16К на других 64-битных платформах.
| Синтаксис: | 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 (Превышен срок ожидания запроса).
| Синтаксис: | client_header_buffer_size size; |
|---|---|
| По умолчанию: | client_header_buffer_size 1k; |
| Контекст: | http, server |
Устанавливает размер буфера для чтения заголовка запроса клиента. Для большинства запросов достаточно буфера размером 1К байт. Однако, если запрос содержит длинные куки или исходит от WAP-клиента, он может не поместиться в 1К. Если строка запроса или поле заголовка запроса не помещаются в этот буфер, выделяются более крупные буферы, настроенные директивой large_client_header_buffers.
Если директива указана на уровне сервера, может использоваться значение от сервера по умолчанию. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | client_header_timeout time; |
|---|---|
| По умолчанию: | client_header_timeout 60s; |
| Контекст: | http, server |
Определяет таймаут для чтения заголовка запроса клиента. Если клиент не передаст весь заголовок в течение этого времени, запрос завершается с ошибкой 408 (Превышен срок ожидания запроса).
| Синтаксис: | client_max_body_size size; |
|---|---|
| По умолчанию: | client_max_body_size 1m; |
| Контекст: | http, server, location |
Устанавливает максимальный разрешённый размер тела запроса клиента. Если размер тела запроса превышает заданное значение, клиенту возвращается ошибка 413 (Запрос слишком большой). Обратите внимание, что браузеры могут не корректно отображать эту ошибку. Установка 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, необходимо увеличить его до 4К.
| Синтаксис: | 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 в настоящее время игнорируют эту директиву.
| Синтаксис: | 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).
Если директива указана на уровне сервера, то используется значение по умолчанию для сервера. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | 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 (Внутренняя ошибка сервера). В таких случаях в логе ошибок можно увидеть сообщение «цикл перенаправления или переписывания».
| Синтаксис: | keepalive_disable none | browser ...; |
|---|---|
| По умолчанию: | keepalive_disable msie6; |
| Контекст: | http, server, location |
Отключает поддерживаемые соединения с браузерами, которые ведут себя неправильно. Параметры browser указывают, какие браузеры будут затронуты. Значение msie6 отключает поддерживаемые соединения со старыми версиями MSIE после получения запроса POST. Значение safari отключает поддерживаемые соединения с Safari и подобными браузерами на macOS и похожих операционных системах. Значение none включает поддерживаемые соединения со всеми браузерами.
До версии 1.1.18 значение safari соответствовало всем браузерам Safari и подобным на всех операционных системах, и поддерживаемые соединения с ними были отключены по умолчанию. | Синтаксис: | keepalive_requests number; |
|---|---|
| По умолчанию: | keepalive_requests 1000; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.8.0.
Устанавливает максимальное количество запросов, которые могут быть обработаны через одно поддерживаемое соединение. После обработки максимального количества запросов соединение закрывается.
Периодическое закрытие соединений необходимо для освобождения выделенной памяти для каждого соединения. Поэтому использование слишком высокого максимального числа запросов может привести к чрезмерному использованию памяти и не рекомендуется.
До версии 1.19.10 значение по умолчанию было 100.
| Синтаксис: | keepalive_time time; |
|---|---|
| По умолчанию: | keepalive_time 1h; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.19.10.
Ограничивает максимальное время, в течение которого запросы могут обрабатываться через одно поддерживаемое соединение. После достижения этого времени соединение закрывается после обработки последующего запроса.
| Синтаксис: | keepalive_timeout
timeout
[header_timeout]; |
|---|---|
| По умолчанию: | keepalive_timeout 75s; |
| Контекст: | http, server, location |
Первый параметр задаёт время ожидания, в течение которого поддерживаемое соединение клиента останется открытым на стороне сервера. Значение ноль отключает поддерживаемые соединения клиентов. Необязательный второй параметр устанавливает значение в заголовке ответа «Keep-Alive: timeout=time». Два параметра могут отличаться.
Заголовок «Keep-Alive: timeout=time» распознаётся Mozilla и Konqueror. MSIE закрывает поддерживаемые соединения самостоятельно примерно через 60 секунд.
| Синтаксис: | large_client_header_buffers number size; |
|---|---|
| По умолчанию: | large_client_header_buffers 4 8k; |
| Контекст: | http, server |
Устанавливает максимальный размер буферов для чтения больших заголовков запроса клиента. Строка запроса не может превышать размер одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не может превышать размер одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по требованию. По умолчанию размер буфера равен 8К байт. Если после обработки запроса соединение переходит в поддерживаемое состояние, эти буферы освобождаются.
Если директива указана на уровне сервера, то используется значение по умолчанию для сервера. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | limit_except method ... { ... } |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Ограничивает разрешённые HTTP-методы внутри местоположения. Параметр 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]
[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]
[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 для сокета доменной системы, на котором сервер будет принимать запросы. Могут быть указаны как 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];
Сокеты доменной системы (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, или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).Неправильное использование этой опции может иметь свои последствия для безопасности.
-
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 2.4+, NetBSD 5+ и FreeBSD 9.0-STABLE) они могут быть настроены с помощью параметров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», разрешения ссылок на относительные компоненты пути «.» и «..», и возможного сжатия двух или более смежных слешей в один слеш.
Локация может быть определена либо строкой префикса, либо регулярным выражением. Регулярные выражения задаются с модификатором «~*» (для нечувствительного к регистру сопоставления) или модификатором «~» (для чувствительного к регистру сопоставления). Для поиска совпадающей локации nginx сначала проверяет локации, определённые с помощью строк префиксов (локации префикса). Среди них выбирается и запоминается локация с наибольшим совпадающим префиксом. Затем проверяются регулярные выражения в порядке их появления в файле конфигурации. Поиск регулярных выражений завершается при первом совпадении, и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, используется конфигурация локации префикса, запомненная ранее.
Блоки location могут быть вложенными, с некоторыми исключениями, указанными ниже.
Для систем с игнорированием регистра, таких как macOS и Cygwin, сопоставление со строками префиксов игнорирует регистр (0.7.7). Однако сравнение ограничено локалями с одним байтом.
Регулярные выражения могут содержать захватчики (0.7.40), которые могут быть использованы в других директивах.
Если у локации с наибольшим совпадающим префиксом установлен модификатор «^~», то регулярные выражения не проверяются.
Также, с помощью модификатора «=» можно определить точное совпадение URI и локации. Если точное совпадение найдено, поиск завершается. Например, если запрос «/» часто встречается, определение «location = /» ускорит обработку таких запросов, так как поиск завершается сразу после первого сравнения. Такая локация очевидно не может содержать вложенных локаций.
В версиях с 0.7.1 по 0.8.41, если запрос совпадал с локацией префикса без модификаторов «=» и «^~», поиск также завершался, и регулярные выражения не проверялись.
Давайте проиллюстрируем вышесказанное примером:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
Запрос «/» будет соответствовать конфигурации А, запрос «/index.html» — конфигурации B, запрос «/documents/document.html» — конфигурации C, запрос «/images/1.gif» — конфигурации D, а запрос «/documents/1.jpg» — конфигурации E.
Префикс «@» определяет именованную локацию. Такая локация не используется для обработки обычных запросов, а используется для перенаправления запросов. Они не могут быть вложенными и не могут содержать вложенные локации.
Если локация определена строкой префикса, которая заканчивается символом слеша, и запросы обрабатываются одной из директив proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass или grpc_pass, то выполняется специальная обработка. В ответ на запрос с URI, равным этой строке, но без заключительного слеша, будет возвращено постоянное перенаправление с кодом 301 на запрашиваемый URI со добавленным слешем. Если это нежелательно, можно определить точное совпадение URI и локации так:
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_ranges number; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.1.2.
Ограничивает максимальное допустимое количество диапазонов в запросах с диапазонами байт. Запросы, превышающие это ограничение, обрабатываются так, как если бы диапазоны байт не были указаны. По умолчанию количество диапазонов не ограничено. Нулевое значение полностью отключает поддержку диапазонов байт.
| Синтаксис: | merge_slashes on | off; |
|---|---|
| По умолчанию: | merge_slashes on; |
| Контекст: | http, server |
Включает или отключает сжатие двух или более смежных слешей в URI до одного слеша.
Обратите внимание, что сжатие необходимо для правильного сопоставления позиции строки префикса и регулярного выражения. Без него запрос «//scripts/one.php» не будет совпадать
location /scripts/ {
...
}
и может обрабатываться как статический файл. Поэтому он преобразуется в «/scripts/one.php».
Включение сжатия off может потребоваться, если URI содержит закодированные в base64 имена, поскольку base64 использует символ «/» внутри. Однако по соображениям безопасности лучше не отключать сжатие.
Если директива указана на уровне сервера, может использоваться значение по умолчанию для сервера. Подробности приведены в разделе «Выбор виртуального сервера».
| Синтаксис: | 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 32К.
| Синтаксис: | 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;
}
Файл /data/w3/i/top.gif будет отправлен в ответ на запрос “/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 разрешает доступ.
Пример:
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, для предварительной загрузки данных для sendfile() можно использовать aio:
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
В этой конфигурации sendfile() вызывается с флагом SF_NODISKIO, что заставляет его не блокироваться при дисковых ввода-выводах, а вместо этого сообщать о том, что данные не находятся в памяти. nginx затем инициирует асинхронную загрузку данных, читая один байт. При первом чтении ядро FreeBSD загружает первые 128 КБ файла в память, хотя последующие чтения будут загружать данные только порциями по 16 КБ. Это можно изменить с помощью директивы 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 буфера, используемого для хранения тела ответа подзапроса. По умолчанию размер буфера равен одной странице памяти. Это либо 4К, либо 8К, в зависимости от платформы. Однако его можно сделать меньше.
Директива применима только для подзапросов с ответами, сохранёнными в памяти. Например, такие подзапросы создаются модулем 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- “
?”, если строка запроса содержит аргументы, или пустая строка в противном случае $limit_rate- установка этой переменной включает ограничение скорости ответа; см. limit_rate
$msec- текущее время в секундах с разрешением до миллисекунд (1.3.9, 1.2.6)
$nginx_version- версия nginx
$pid- PID рабочего процесса
$pipe- “
p”, если запрос был с pipelining, “.” в противном случае (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 клиента -
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- имя пользователя, предоставленное с аутентификацией Basic
$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_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_local- локальное время в формате Common Log Format (1.3.12, 1.2.7)
$uri
- текущий URI в запросе, нормализованный
Значение
$uriможет изменяться во время обработки запроса, например, при выполнении внутренних перенаправлений или при использовании индексных файлов.
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_core_module.html