Персональный | |
Директивы модуля ngx_http_core_module
01.12.2008 СодержаниеДирективы
Директивыsyntax: alias путь default: нет context: location Директива задаёт замену для указанного location. Например, при такой конфигурации
на запрос "/i/top.gif" будет отдан файл "/spool/w3/images/top.gif".
В значении пути можно использовать переменные. Директива alias не может использоваться внутри location, заданного регулярным выражением. syntax: client_body_in_file_only on|clean|off default: client_body_in_file_only off context: http, server, location Директива определяет, сохранять ли всё тело запроса клиента в файл. Директиву можно использовать для отладки и при использовании переменной $request_body_file или метода $r->request_body_file модуля ngx_http_perl_module. При использовании параметра "on" временные файлы по окончании обработки запроса не удаляется. Параметр "clean" разрешает удалять временные файлы, оставшиеся по окончании обработки запроса. syntax: client_body_buffer_size размер default: client_body_buffer_size 8k/16k context: http, server, location Директива задаёт размер буфера для чтения тела запроса клиента. Если тело запроса больше заданного буфера, то всё тело запроса или только его часть записывается во временный файл. По умолчанию размер одного буфера равен двум размерам страницы, в зависимости от платформы это или 8K, или 16K. syntax: client_body_temp_path путь [ уровень1 [ уровень2 [ уровень3 ] ] ] default: client_body_temp_path client_body_temp context: http, server, location Директива задаёт имя каталога для хранения временных файлов с телом запроса клиента. В каталоге может использоваться иерархия подкаталогов до трёх уровней. Например, при такой конфигурации имя временного будет такого вида:client_body_temp_path /spool/nginx/client_temp 1 2; /spool/nginx/client_temp/7/45/00000123457 syntax: client_body_timeout время default: client_body_timeout 60 context: http, server, location Директива задаёт таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, а только между двумя операциями чтения. Если по истечении этого времени клиент ничего не передаст, то ему возвращается ошибка "Request time out" (408). syntax: client_header_buffer_size размер default: client_header_buffer_size 1k context: http, server Директива задаёт размер буфера для чтения заголовка запроса клиента. Для подавляющего большинства запросов вполне достаточно буфера размером в 1K. Однако если в запросе есть большие cookies или же запрос пришёл от wap-клиента, то он может не поместиться в 1K. Поэтому, если строка запроса или строка заголовка запроса не помещается полностью в этот буфер, то выделяются большие буферы, задаваемые директивой large_client_header_buffers. syntax: client_header_timeout время default: client_header_timeout 60 context: http, server Директива задаёт таймаут при чтении заголовка запроса клиента. Если по истечении этого времени клиент не передаст полностью заголовок запроса, то ему возвращается ошибка "Request time out" (408). syntax: client_max_body_size размер default: client_max_body_size 1m context: http, server, location Директива задаёт максимально допустимый размер тела запроса клиента, указываемый в строке "Content-Length" в заголовке запроса. Если размер больше заданного, то клиенту возвращается ошибка "Request Entity Too Large" (413). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. syntax: default_type MIME-тип default: default_type text/plain context: http, server, location Директива задаёт MIME-тип ответов по умолчанию. syntax: directio [размер|off] default: directio off context: http, server, location Директива (0.7.7) разрешает использовать флаги O_DIRECT (FreeBSD, Linux), F_NOCACHE (Mac OS X) или функцию directio() (Solaris) при чтении файлов, размер которых больше либо равен указанному. Директива автоматически запрещает (0.7.15) использование sendfile'а для данного запроса. Рекомендуется использовать для больших файлов: directio 4m; syntax: error_page код [код ...] [=|=ответ] uri default: нет context: http, server, location, if в location Директива задаёт URI, который будет показываться для указанных ошибок. Директивы наследуются с предыдущего уровня при условии, что на данном уровне не описаны свои директивы error_page. В URI можно использовать переменные. Пример использования: error_page 404 /404.html; error_page 502 503 504 /50x.html; error_page 403 http://example.com/forbidden.html; Кроме того, можно поменять код ответа на другой, например: error_page 404 =200 /empty.gif; Если ошибочный ответ обрабатывается проксированным сервером или FastCGI-сервером и этот сервер может вернуть разные коды ответов, например, 200, 302, 401 или 404, то можно выдавать возвращаемый код: error_page 404 = /404.php; Если при перенаправлении не нужно менять URI, то можно перенаправить обработку ошибки в именованный location: syntax: if_modified_since [exact|before] default: if_modified_since exact context: http, server, location
Директива определяет, как сравнивать время модификации ответа и
время в заголовке запроса
syntax: internal default: нет context: location Директива указывает, что данный location может использоваться только для внутренних запросов. Для внешних запросов будет возвращаться ошибка "Not found" (404). Внутренними запросами являются
Пример использования: syntax: keepalive_timeout время [время] default: keepalive_timeout 75 context: http, server, location Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. Второй параметр задаёт значение в строке "Keep-Alive: timeout=время" в заголовке ответа. Параметры могут отличаться друг от друга. Строку "Keep-Alive: timeout=время" понимают Mozilla и Konqueror. MSIE сам закрывает keep-alive соединение примерно через 60 секунд. syntax: large_client_header_buffers число размер default: large_client_header_buffers 4 4k/8k context: http, server Директива задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса должна быть не больше размера одного буфера, иначе клиенту возвращается ошибка "Request URI too large" (414). Длинная строка заголовка запроса также должна быть не больше размера одного буфера, иначе клиенту возвращается ошибка "Bad request" (400). Буферы выделяются только по мере необходимости. По умолчанию размер одного буфера равен размеру страницы, в зависимости от платформы это или 4K, или 8K. Если по окончании обработки запроса соединение переходит в состояние keep-alive, то эти буферы освобождаются. syntax: limit_except методы { ... } default: нет context: location Директива ограничивает HTTP-методы, доступные внутри location. Метод GET также включает в себя метод HEAD. Для ограничения могут использоваться директивы модулей ngx_http_access_module и ngx_http_auth_basic_module:
Обратите внимание, что данное ограничение будет выполнятся для всех методов,
кроме методов GET и HEAD.
syntax: limit_rate скорость default: нет context: http, server, location, if в location Директива задаёт скорость передачи ответа клиенту. Скорость задаётся в байтах в секунду. Ограничение работает только для одного соединения, то есть, если клиент откроет 2 соединения, то суммарная скорость будет в 2 раза выше ограниченной. Если необходимо ограничить скорость для части клиентов на уровне сервера, то директива limit_rate для этого не подходит. Вместо этого следует задать нужную скорость переменной $limit_rate: syntax: listen адрес:порт [default [backlog=число | rcvbuf=размер | sndbuf=размер | accept_filter=фильтр | deferred | bind | ssl]] default: listen *:80 | *:8000 context: server Директива задаёт адрес и порт, на которых сервер принимает запросы. Можно указать только адрес или только порт, кроме того, адрес может быть именем сервера, например: listen 127.0.0.1:8000; listen 127.0.0.1; listen 8000; listen *:8000; listen localhost:8000; Если указан только адрес, то используется порт 80. Если директива не указана, то используется порт *:80, если nginx работает с правами пользователя root, или порт *:8000. Если у директивы есть параметр default, то сервер, в котором описана эта директива, будет сервером по умолчанию для указанной пары адрес:порт. Если же директив с параметром default нет, то сервером по умолчанию будет первый сервер, в котором описана пара адрес:порт. В директиве listen с параметром default можно также указать несколько параметров, специфичных для системных вызовов listen(2) и bind(2).
Пример использования параметров: listen 127.0.0.1 default accept_filter=dataready backlog=1024; syntax: location [=|~|~*|^~|@] /uri/ { ... } default: нет context: server Директива устанавливает конфигурацию в зависимости от URI запроса. location можно задать обычной строкой или регулярным выражением. Регулярные выражения задаются префиксом "~*" без учёта регистра символов, и "~" с учётом. Для определения соответствия location'а и запроса сначала проверяются location'ы, заданные обычными строками. Среди них ищется максимальное совпадение. Затем проверяются регулярные выражения. В отличие от обычных строк, они не сортируются, а проверяются в порядке их следования в конфигурационном файле. Проверка регулярных выражений прекращается после первого же совпадения. Если совпадание с регулярным выражением не найдено, то используется конфигурация максимально совпавшего location'а. Для операционных систем, не чувствительных к регистру символов, таких как Mac OS X и Cygwin, проверка обычных строк делается без учёта регистра (0.7.7). Однако, сравнение ограничено только однобайтными locale'ями. Если нужно запретить проверку регулярных выражений после проверки обычных строк, то это можно сделать с помощью префикса "^~". Если у максимально совпавшего location'а есть этот префикс, то регулярные выражения не проверяются. Кроме того, с помощью префикса "=" можно задать точное совпадение URI и location. При совпадении поиск сразу же прекращается, так как дальше искать не имеет смысла. Например, если запрос "/" очень частый, то указав "location = /", можно ускорить обработку этого запроса, так как поиск location прекратится после первого же сравнения. Если запрос точно совпал с обычным location'ом без префиксов "=" и "~^", то поиск тоже сразу же прекращается и регулярные выражения также не проверяются. Проиллюстрируем вышесказанное примером:
Для запроса "/" будет выбрана конфигурация A,
для запроса "/documents/document.html" конфигурация B,
для запроса "/images/1.gif" конфигурация C,
для запроса "/documents/1.jpg" конфигурация D.
Префикс "@" задаёт именнованный location. Такой location не используется при обычной обработке запросов, а предназначен только для перенаправления в него запросов. syntax: log_subrequest [on|off] default: log_subrequest off context: http, server, location Директива разрешает или запрещает записывать в access_log подзапросы. syntax: merge_slashes [on|off] default: merge_slashes on context: http, server Директива разрешает или запрещает объединять в URI два и более слэшей в один. Необходимо иметь ввиду, что это объединение необходимо для корректной проверки location'ов и регулярных выражений. Например, запрос "//scripts/one.php" не попадает в
и может быть обслужен как статический файл,
поэтому он приводится в "/scripts/one.php".
Выключение объединения может понадобиться, если в URI используются имена, закодированные методом base64, который использует символ "/". Но по соображениям безопасности лучше избегать выключение объединения. Если директива указана на уровне server в сервере по умолчанию, то её значение распространяется на все виртуальные сервера, слушающие на том же адресе и порту. syntax: msie_padding [on|off] default: msie_padding on context: http, server, location Директива разрешает или запрещает добавлять в ответы для MSIE со статусом больше 400 комментарий для увеличения размера ответа до 512 байт. syntax: msie_refresh [on|off] default: msie_refresh off context: http, server, location Директива разрешает или запрещает выдавать для MSIE refresh'ы вместо редиректов. syntax: open_file_cache max=N [inactive=время]|off default: open_file_cache off context: http, server, location Директива задаёт кэш, в котором могут хранится
Параметры директивы:
Пример использования: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; syntax: open_file_cache_errors on|off default: open_file_cache_errors off context: http, server, location Директива определяет, кэшировать или нет ошибки поиска файлов в open_file_cache. syntax: open_file_cache_min_uses число default: open_file_cache_min_uses 1 context: http, server, location Директива определяет минимальное число использований файла в течение времени, заданного параметром inactive в директиве open_file_cache, после которого дескриптор файла будет оставаться окрытым в кэше. syntax: open_file_cache_valid время default: open_file_cache_valid 60 context: http, server, location Директива определяет, через какое время нужно проверять актуальность информации об элементе в open_file_cache. syntax: optimize_server_names [on|off] default: optimize_server_names on context: http, server Директива разрешает или запрещает оптимизировать проверку имени хоста в name-based виртуальных серверах. Проверка в частности влияет на имя хоста, используемого в редиректах. Если оптимизация разрешена и все name-based сервера, слушающие на одной паре адрес:порт, имеют одинаковую конфигурацию, то во время исполнения запроса имена не проверяются и в редиректах используется первое имя сервера. Если в редиректе нужно использовать имя хоста, переданное клиентом, то оптимизацию нужно выключить. syntax: port_in_redirect [on|off] default: port_in_redirect on context: http, server, location Директива разрешает или запрещает указывать порт в редиректах, выдаваемых nginx'ом. syntax: recursive_error_pages [on|off] default: recursive_error_pages off context: http, server, location Директива разрешает или запрещает делать несколько перенаправлений через директиву error_page. syntax: reset_timedout_connection [on|off] default: reset_timedout_connection off context: http, server, location Директива разрешает или запрещает сбрасывать соединение по таймауту. Сброс делается следующим образом перед закрытием сокета для него ставится опция SO_LINGER с таймаутом 0. После чего при закрытии сокета клиенту отсылается пакет RST, а всё память, связанная с этим сокетом, освобождается. Это позволяет избежать длительного нахождения уже закрытого сокета в состоянии FIN_WAIT1 с заполненными буферами. Необходимо отметить, что соединения, находящиеся в состоянии keepalive, по истечении таймаута закрываются обычным образом. syntax: resolver адрес default: нет context: http, server, location Директива задаёт адрес name-сервера, например: syntax: resolver_timeout время default: resolver_timeout 30s context: http, server, location Директива задаёт таймаут для определения имени, например: syntax: root путь default: root html context: http, server, location, if в location Директива задаёт корневой каталог для запросов. Например, при такой конфигурации
на запрос "/i/top.gif" будет отдан файл "/spool/w3/i/top.gif".
В значении пути можно использовать переменные.
syntax: satisfy all|any default: satisfy all context: location Директива разрешает доступ при хотя бы одной успешной проверке, выполненной модулями ngx_http_access_module или ngx_http_auth_basic_module: syntax: satisfy_any on|off default: satisfy_any off context: location Директива переименована в директиву satisfy. syntax: send_timeout время default: send_timeout 60 context: http, server, location Директива задаёт таймаут при передаче ответа клиенту. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями записями. Если по истечении этого времени клиент ничего не примет, то nginx закрывает соединение. syntax: sendfile [on|off] default: sendfile off context: http, server, location Директива разрешает или запрещает использовать sendfile(). syntax: server { ... } default: нет context: http Директива задаёт конфигурацию для виртуального сервера. Чёткого разделения виртуальных серверов ip-based (на основании ip-адреса) и name-based (на основании имени, передаваемого в строке "Host" заголовка запроса), нет. Вместо этого директивами listen описываются все адреса и порты, на которых нужно принимать соединения для этого сервера, и в директиве server_name указываются все имена серверов. Пример конфигурации описан в настройке виртуальных серверов. syntax: server_name имя [...] default: server_name hostname context: server Директива задаёт имена виртуального сервера, например: Первое имя становится основным именем сервера. По умолчанию используется имя машины (hostname). В именах серверов можно использовать "*" для замены первой или последней части имени: Два первых вышеприведённых имени можно объединить в одно: Кроме того, в качестве имени сервера можно использовать регулярное выражение, указав перед ним "~": Начиная с 0.7.11, можно использовать пустое имя "":
что позволяет обрабатывать запросы без строки "Host" в заголовке запроса
в этом сервере, а не в сервере по умолчанию для данной пары адрес:порт.
Порядок проверки имён следующий:
syntax: server_name_in_redirect [on|off] default: server_name_in_redirect on context: http, server, location Директива разрешает или запрещает использовать в редиректах, выдаваемых nginx'ом, основное имя сервера, задаваемое директивой server_name. Если использование основного имени запрещено, то используется имя, указанного в строке "Host" в заголовке запроса. Если же этой строки нет, то используется IP-адрес сервера. syntax: server_names_hash_max_size число default: server_names_hash_max_size 512 context: http Директива задаёт максимальный размер хэш-таблиц имён серверов. Подробнее смотри в описании настройки хэшей. syntax: server_names_hash_bucket_size число default: server_names_hash_bucket_size 32/64/128 context: http Директива задаёт размер корзины в хэш-таблицах имён серверов. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее смотри в описании настройки хэшей. syntax: server_tokens [on|off] default: server_tokens on context: http, server, location Директива разрешает или запрещает выдавать версию nginx'а в сообщениях об ошибках и в строке заговка ответа "Server". syntax: tcp_nodelay [on|off] default: tcp_nodelay on context: http, server, location Директива разрешает или запрещает использовать опцию TCP_NODELAY. Опция включаются только при переходе соединения в состояние keep-alive. syntax: tcp_nopush [on|off] default: tcp_nopush off context: http, server, location Директива разрешает или запрещает использовать опции TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. Опции включаются только при использовании sendfile. Включение опции позволяет
syntax: types { ... } context: http, server, location Директива задаёт соответствие расширения и MIME-типов ответов. Одному MIME-типу может соответствовать несколько расширений. По умолчанию используется такие соответствия: Достаточно полная таблица соотвествий входит в дистрибутив и находится в файле conf/mime.types. Для того, чтобы для определённого location'а для всех ответов выдавался MIME-тип "application/octet-stream", можно использовать следующее: syntax: underscores_in_headers [on|off] default: underscores_in_headers off context: http, server Директива разрешает или запрещает использование символов подчёркивания в строках заголовка запроса клиента. Встроенные переменныеМодуль ngx_http_core_module поддерживает встроенные переменные, имена которых совпадают с именами переменных в Apache. Прежде всего, это переменные, представляющие из себя строки заголовка запроса клиента, например, $http_user_agent, $http_cookie и тому подобное. Кроме того, есть и другие переменные:
(C) Игорь Сысоев |