# HG changeset patch # User Ruslan Ermilov # Date 1324300205 0 # Node ID ff1e139a8c98789e5526358fcc8deb19ab91e42c # Parent 6f710464be38a114817c4a9ac802d669fd1d9747 Bring the ngx_http_core_module documentation up to date. diff -r 6f710464be38 -r ff1e139a8c98 xml/ru/docs/http/ngx_http_core_module.xml --- a/xml/ru/docs/http/ngx_http_core_module.xml Mon Dec 19 13:06:15 2011 +0000 +++ b/xml/ru/docs/http/ngx_http_core_module.xml Mon Dec 19 13:10:05 2011 +0000 @@ -2,138 +2,165 @@ - -
+
-[on|off|sendfile] + + on | + off | + sendfile + off -http, server, location +http +server +location +0.8.11 -Директива (0.8.11) разрешает или запрещает использовать файловый AIO +Разрешает или запрещает использование файлового асинхронного ввода-вывода (AIO) во FreeBSD и Linux. -Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3 версии. -AIO можно собрать в ядре статически +Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3. +AIO можно либо собрать в ядре статически: options VFS_AIO -или же подгрузить динамически +либо загрузить динамически через загружаемый модуль ядра: kldload aio -Во FreeBSD 5 и 6 при включении AIO статически или динамически на стадии -загрузки ядра вся сетевая подсистема будет использовать GiantLock, -что может негативно сказаться на производительности системы в целом. -Эта зависимость устранена во FreeBSD-6.4 STABLE от 2009 года и во FreeBSD 7. -Однако, начиная с FreeBSD 5.3, есть возможность включать AIO, -не связывая сетевую подсистему GiantLock'ом — для этого модуль AIO -нужно подгружать уже после загрузки ядра. -В этом случае в /var/log/messages появится сообщение +В версиях FreeBSD 5 и 6 включение AIO статически или динамически +на стадии загрузки ядра приводит к тому, что вся сетевая подсистема +будет использовать блокировку Giant, что может негативно сказаться на +производительности системы в целом. +Это ограничение устранено во FreeBSD 6.4-STABLE в 2009 году +и во FreeBSD 7. +Однако, начиная с FreeBSD 5.3 есть возможность включать AIO, +не связывая сетевую подсистему блокировкой Giant — для этого модуль +AIO нужно подгружать уже после загрузки ядра. +В этом случае в /var/log/messages появится следующее сообщение: WARNING: Network stack Giant-free, but aio requires Giant. Consider adding 'options NET_WITH_GIANT' or setting debug.mpsafenet=0 которое можно смело проигнорировать. -Требование использовать GiantLock в AIO связано с тем, что FreeBSD -поддерживает асинхронные вызовы aio_read()/aio_write() для работы с сокетами. -Но поскольку nginx использует AIO только для работы с диском, то проблем -не возникает. +Требование использовать блокировку Giant в AIO связано с тем, что +FreeBSD поддерживает асинхронные вызовы +aio_read +и +aio_write +для работы с сокетами. +Но поскольку nginx использует AIO только для работы с диском, +то проблем не возникает. -Для работы AIO нужно выключить sendfile: +Для работы AIO нужно выключить +: -location /video/ { - sendfile off; - aio on; - output_buffers 1 64k; +location /video/ { + sendfile off; + aio on; + output_buffers 1 64k; } -Кроме того, начиная с FreeBSD 5.2.1 и nginx-0.8.12, AIO также можно -использовать для подгрузки данных для sendfile(): +Кроме того, начиная с FreeBSD 5.2.1 и nginx 0.8.12, AIO также можно +использовать для подгрузки данных для sendfile: -location /video/ { - sendfile on; - tcp_nopush on; - aio sendfile; +location /video/ { + sendfile on; + tcp_nopush on; + aio sendfile; } -В такой конфигурации используется флаг SF_NODISKIO и sendfile() -не блокируется на диске, а сообщает об отсутствии данных в памяти, -после чего nginx инициирует асинхронную подгрузку данных, -читая только один байт. При этом ядро FreeBSD подгружает в память -первые 128K файла, однако при последующих чтениях файл подгружается -частями только по 16K. Изменить это можно с помощью директивы +В такой конфигурации функция sendfile вызывается с флагом +SF_NODISKIO, в результате она не блокируется на диске, а +сообщает об отсутствии данных в памяти, после чего nginx инициирует +асинхронную подгрузку данных, читая только один байт. +При этом ядро FreeBSD подгружает в память первые 128K байт файла, однако +при последующих чтениях файл подгружается частями только по 16K. +Изменить это можно с помощью директивы . -В Linux AIO можно использовать, только начиная с версии ядра 2.6.22, -и, кроме того, ещё необходимо дополнительно включать -, иначе чтение будет блокирующимся: +В Linux AIO можно использовать только начиная с версии ядра 2.6.22, и, +кроме того, ещё необходимо дополнительно включать +, +иначе чтение будет блокирующимся: -location /video/ { - aio on; - directio 512; - output_buffers 1 128k; +location /video/ { + aio on; + directio 512; + output_buffers 1 128k; } -Поскольку directio в Linux можно использовать только для чтения блоков, -выравненных по 512 байт (или 4К для XFS), то невыравненный конец файла -будет читаться блокировано. То же относится к запросам части ответа -byte-ranges и к запросам FLV не с начала файла: чтение невыровненных начала -и конца ответа будет блокирующимся. sendfile выключать не нужно, так -как при использовании directio он выключается сам. +Поскольку + +в Linux можно использовать только для чтения блоков, выравненных +на границу 512 байт (или 4К для XFS), то невыравненный конец файла +будет читаться блокированно. +То же относится к запросам с указанием диапазона запрашиваемых байт +(byte-range requests) и к запросам FLV не с начала файла: чтение +невыравненных начала и конца ответа будет блокирующимся. +Явно выключать + +не нужно, так как при использовании + +он выключается автоматически. -путь +путь location -Директива задаёт замену для указанного location'а. +Задаёт замену для указанного location'а. Например, при такой конфигурации -location /i/ { - alias /data/w3/images/; +location /i/ { + alias /data/w3/images/; } -на запрос "/i/top.gif" будет отдан файл "/data/w3/images/top.gif". +на запрос +“/i/top.gif” будет отдан файл +/data/w3/images/top.gif. -В значении пути можно использовать переменные. +В значении аргумента путь можно использовать переменные, +кроме $document_root и $realpath_root. -Если директива alias используется внутри location'а, заданного -регулярным выражением, то регулярное выражение должно содержать выделения, -а директива alias — ссылки на эти выделения (0.7.40), например: +Если alias используется внутри location'а, заданного +регулярным выражением, то регулярное выражение должно содержать +выделения, а сам alias — ссылки на эти выделения +(0.7.40), например: location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { - alias /data/w3/images/$1; + alias /data/w3/images/$1; } @@ -141,92 +168,132 @@ Если location и последняя часть значения директивы совпадают: -location /images/ { - alias /data/w3/images/; +location /images/ { + alias /data/w3/images/; +} + +то лучше воспользоваться директивой +: + +location /images/ { + root /data/w3; } -то лучше воспользоваться директивой : - -location /images/ { - root /data/w3; -} - + + + + + + +on | off +on +http +server +location + + +Позволяет запретить формат передачи данных частями (chunked transfer +encoding) в HTTP/1.1. +Это может понадобиться при использовании программ, не поддерживающих +chunked encoding, несмотря на требования стандарта. + + + + + + + +размер +8k|16k +http +server +location + + +Задаёт размер буфера для чтения тела запроса клиента. +Если тело запроса больше заданного буфера, +то всё тело запроса или только его часть записывается во +временный файл. +По умолчанию размер одного буфера равен двум размерам страницы. +На x86, других 32-битных платформах и x86-64 это 8K. +На других 64-битных платформах это обычно 16K. -on|clean|off + + on | + clean | + off + off -http, server, location +http +server +location -Директива определяет, сохранять ли всё тело запроса клиента в файл. -Директиву можно использовать для отладки и при использовании -переменной $request_body_file или метода -$r->request_body_file -модуля ngx_http_perl_module. +Определяет, сохранять ли всё тело запроса клиента в файл. +Директиву можно использовать для отладки и при использовании переменной +$request_body_file +или метода +$r->request_body_file +модуля +ngx_http_perl_module. -При использовании параметра "on" временные файлы по окончании -обработки запроса не удаляется. +При установке значения on временные файлы +по окончании обработки запроса не удаляются. -Параметр "clean" разрешает удалять временные файлы, оставшиеся по окончании -обработки запроса. +Значение clean разрешает удалять временные файлы, +оставшиеся по окончании обработки запроса. -on|off +on | off + off -http, server, location +http +server +location -Директива определяет, хранить ли всё тело запроса клиента в одном буфере. -Директива рекомендуется при использовании переменной $request_body -для уменьшения операций копирования. - - - - - - -размер -8k/16k -http, server, location - - -Директива задаёт размер буфера для чтения тела запроса клиента. -Если тело запроса больше заданного буфера, то всё тело запроса или только -его часть записывается во временный файл. -По умолчанию размер одного буфера равен двум размерам страницы, в зависимости -от платформы это или 8K, или 16K. +Определяет, сохранять ли всё тело запроса клиента в одном буфере. +Директива рекомендуется при использовании переменной +$request_body +для уменьшения требуемого числа операций копирования. -путь [ уровень1 [ уровень2 [ уровень3 ] ] ] - + + путь + [уровень1 + [уровень2 + [уровень3]]] + client_body_temp -http, server, location +http +server +location -Директива задаёт имя каталога для хранения временных файлов с телом запроса -клиента. +Задаёт каталог для хранения временных файлов с телами запросов клиентов. В каталоге может использоваться иерархия подкаталогов до трёх уровней. Например, при такой конфигурации -client_body_temp_path /spool/nginx/client_temp 1 2; +client_body_temp_path /spool/nginx/client_temp 1 2; -имя временного будет такого вида: +временный файл будет следующего вида: /spool/nginx/client_temp/7/45/00000123457 @@ -236,33 +303,38 @@ -время -60 -http, server, location +время +60s +http +server +location -Директива задаёт таймаут при чтении тела запроса клиента. +Задаёт таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, -а только между двумя операциями чтения. +а только между двумя последовательными операциями чтения. Если по истечении этого времени клиент ничего не передаст, -то ему возвращается ошибка "Request time out" (408). +то клиенту возвращается ошибка +. -размер +размер 1k -http, server +http +server -Директива задаёт размер буфера для чтения заголовка запроса клиента. -Для подавляющего большинства запросов вполне достаточно буфера размером в 1K. -Однако если в запросе есть большие cookies или же запрос пришёл -от wap-клиента, то он может не поместиться в 1K. -Поэтому, если строка запроса или строка заголовка запроса не помещается -полностью в этот буфер, то выделяются большие буферы, задаваемые директивой +Задаёт размер буфера для чтения заголовка запроса клиента. +Для большинства запросов достаточно буфера размером в 1K байт. +Однако если в запросе есть длинные cookies, или же запрос +пришёл от WAP-клиента, то он может не поместиться в 1K. +Поэтому, если строка запроса или поле заголовка запроса +не помещаются полностью в этот буфер, то выделяются буферы +большего размера, задаваемые директивой . @@ -270,62 +342,96 @@ -время -60 -http, server +время +60s +http +server -Директива задаёт таймаут при чтении заголовка запроса клиента. -Если по истечении этого времени клиент не передаст полностью заголовок -запроса, то ему возвращается ошибка "Request time out" (408). +Задаёт таймаут при чтении заголовка запроса клиента. +Если по истечении этого времени клиент не передаст полностью заголовок, +то клиенту возвращается ошибка +. -размер +размер 1m -http, server, location +http +server +location -Директива задаёт максимально допустимый размер тела запроса клиента, -указываемый в строке "Content-Length" в заголовке запроса. +Задаёт максимально допустимый размер тела запроса клиента, +указываемый в поле +
Content-Length
+заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка -"Request Entity Too Large" (413). Следует иметь в виду, что -браузеры не умеют -корректно показывать эту ошибку. +. +Следует иметь в виду, что +браузеры не умеют корректно показывать +эту ошибку. +Установка аргумента размер в 0 отключает +проверку размера тела запроса клиента. +
+ +
+ + + +размер +256 +http +server + + +Позволяет производить точную настройку выделений памяти +под конкретные соединения. +Эта директива не оказывает существенного влияния на +производительность и её не следует использовать. -MIME-тип +mime-тип text/plain -http, server, location +http +server +location -Директива задаёт MIME-тип ответов по умолчанию. +Задаёт MIME-тип ответов по умолчанию. +См. также директиву . -[размер|off] +размер | off off -http, server, location +http +server +location +0.7.7 -Директива (0.7.7) разрешает использовать флаги -O_DIRECT (FreeBSD, Linux), F_NOCACHE (Mac OS X) или функцию directio() (Solaris) +Разрешает использовать флаги +O_DIRECT (FreeBSD, Linux), +F_NOCACHE (Mac OS X) +или функцию directio (Solaris) при чтении файлов, размер которых больше либо равен указанному. Директива автоматически запрещает (0.7.15) использование -sendfile'а для данного запроса. + +для данного запроса. Рекомендуется использовать для больших файлов: -directio 4m; +directio 4m; или при использовании в Linux. @@ -334,14 +440,17 @@ -размер +размер 512 -http, server, location +http +server +location +0.8.11 -Директива (0.8.11) устанавливает выравнивание для +Устанавливает выравнивание для . -В большинстве случае достаточно выравнивания 512 байт, однако +В большинстве случаев достаточно 512-байтового выравнивания, однако при использовании XFS под Linux его нужно увеличить до 4K. @@ -349,40 +458,47 @@ -код [код ...] [=|=ответ] uri + + код ... + [=[ответ]] + uri -http, server, location, if в location +http +server +location +if в location -Директива задаёт URI, который будет показываться для указанных ошибок. -Директивы наследуются с предыдущего уровня при условии, что на данном -уровне не описаны свои директивы error_page. -В URI можно использовать переменные. +Задаёт URI, который будет показываться для указанных ошибок. +Директивы error_page наследуются с предыдущего уровня при условии, +что на данном уровне не описаны свои директивы +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 /404.html; +error_page 502 503 504 /50x.html; +error_page 403 http://example.com/forbidden.html; Кроме того, можно поменять код ответа на другой, например: -error_page 404 =200 /empty.gif; +error_page 404 =200 /empty.gif; Если ошибочный ответ обрабатывается проксированным сервером или -FastCGI-сервером и этот сервер может вернуть разные коды ответов, -например, 200, 302, 401 или 404, то можно выдавать возвращаемый код: +FastCGI-сервером, и этот сервер может вернуть разные коды ответов, +например, 200, 302, 401 или 404, то можно выдавать возвращаемый им код: -error_page 404 = /404.php; +error_page 404 = /404.php; @@ -391,11 +507,11 @@ обработку ошибки в именованный location: location / { - error_page 404 = @fallback; + error_page 404 = @fallback; } location @fallback { - proxy_pass http://backend; + proxy_pass http://backend; }
@@ -404,28 +520,41 @@ -[off|exact|before] + + off | + exact | + before + exact -http, server, location +http +server +location +0.7.24 -Директива (0.7.24) определяет, как сравнивать время модификации ответа и -время в заголовке запроса "If-Modified-Since": - - - -off — не проверять заголовок запроса -"If-Modified-Since" (0.7.34); - - - -exact — точно совпадение; - - - -before — время модификации ответа меньше или равно времени, заданному -в заголовке запроса "If-Modified-Since". - +Определяет, как сравнивать время модификации ответа с +временем в поле +
If-Modified-Since
+заголовка запроса: + + + +off + +не проверять поле +
If-Modified-Since
заголовка запроса (0.7.34); +
+ +exact + +точное совпадение; + + +before + +время модификации ответа меньше или равно времени, заданному в поле +
If-Modified-Since
заголовка запроса. +
@@ -433,39 +562,61 @@
+ +on | off +on +http +server + + +Если включено, nginx игнорирует поля заголовка с недопустимыми именами. +Допустимыми считаются имена, состоящие из английских букв, цифр, дефисов +и возможно знаков подчёркивания (последнее контролируется директивой +). + + + + + location -Директива указывает, что данный location может использоваться только -для внутренних запросов. -Для внешних запросов будет возвращаться ошибка "Not found" (404). -Внутренними запросами являются +Указывает, что location может использоваться только для внутренних запросов. +Для внешних запросов клиенту будет возвращаться ошибка +. +Внутренними запросами являются: + -запросы, перенаправленные директивой error_page; +запросы, перенаправленные директивой ; -подзапросы, формируемые командой include virtual модуля ngx_http_ssi_module; +подзапросы, формируемые командой +include virtual +модуля +ngx_http_ssi_module; +ngx_http_ssi_module; -запросы, изменённые директивой rewrite модуля ngx_http_rewrite_module. +запросы, изменённые директивой +. -Пример использования: +Пример: -error_page 404 /404.html; - -location /404.html { +error_page 404 /404.html; + +location /404.html { internal; } @@ -474,30 +625,69 @@ + +none | браузер ... +msie6 safari +http +server +location + + +Запрещает keep-alive соединения с некорректно ведущими себя браузерами. +Аргументы браузер указывают, на какие браузеры это +распространяется. +Значение msie6 запрещает keep-alive соединения +со старыми версиями MSIE после получения запроса POST. +Значение safari запрещает keep-alive соединения +с браузерами Safari. +Значение none разрешает keep-alive соединения +со всеми браузерами. + + + + + -число +число 100 -http, server, location +http +server +location +0.8.0 -Директива (0.8.0) задаёт максимальное число запросов, которые можно +Задаёт максимальное число запросов, которые можно сделать по одному keep-alive соединению. +После того, как будет сделано максимальное число запросов, +соединение закрывается. -время [время] -75 -http, server, location + + таймаут + [заголовок_таймаута] + +75s +http +server +location -Директива задаёт таймаут, в течение которого keep-alive соединение -с клиентом не будет закрыто со стороны сервера. -Второй параметр задаёт значение в строке "Keep-Alive: timeout=время" -в заголовке ответа. Параметры могут отличаться друг от друга. -Строку "Keep-Alive: timeout=время" понимают Mozilla и Konqueror. +Первый аргумент задаёт таймаут, в течение которого keep-alive +соединение с клиентом не будет закрыто со стороны сервера. +Второй необязательный параметр задаёт значение в поле +
Keep-Alive: timeout=время
+заголовка ответа. +Два аргумента могут отличаться друг от друга. +
+ + +Поле +
Keep-Alive: timeout=время
+заголовка понимают Mozilla и Konqueror. MSIE сам закрывает keep-alive соединение примерно через 60 секунд.
@@ -505,76 +695,102 @@ -число размер - -4 4k/8k -http, server +число размер +4 8k +http +server -Директива задаёт максимальное число и размер буферов для чтения -большого заголовка запроса клиента. -Строка запроса должна быть не больше размера одного буфера, иначе клиенту -возвращается ошибка "Request URI too large" (414). -Длинная строка заголовка запроса также должна быть не больше размера одного -буфера, иначе клиенту возвращается ошибка "Bad request" (400). +Задаёт максимальное число и размер +буферов для чтения большого заголовка запроса клиента. +Строка запроса не должна превышать размера одного буфера, иначе клиенту +возвращается ошибка +. +Поле заголовка запроса также не должно превышать размера одного буфера, +иначе клиенту возвращается ошибка +. Буферы выделяются только по мере необходимости. -По умолчанию размер одного буфера равен размеру страницы, в зависимости -от платформы это или 4K, или 8K. +По умолчанию размер одного буфера равен 8K байт. Если по окончании обработки запроса соединение переходит в состояние -keep-alive, то эти буферы освобождаются. +keep-alive, эти буферы освобождаются. -методы +метод ... location -Директива ограничивает HTTP-методы, доступные внутри location. -Метод GET также включает в себя метод HEAD. -Для ограничения могут использоваться директивы модулей +Ограничивает HTTP-методы, доступные внутри location. +Аргумент метод может быть одним из +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_basic_module: -limit_except GET { - allow 192.168.1.0/32; - deny all; +limit_except GET { + allow 192.168.1.0/32; + deny all; } -Обратите внимание, что данное ограничение будет выполняться для всех методов, -кроме методов GET и HEAD. +Обратите внимание, что данное ограничение действует для всех методов, +кроме GET и HEAD. - -скорость - -http, server, location, if в location +скорость +0 +http +server +location +if в location -Директива задаёт скорость передачи ответа клиенту. +Ограничивает скорость передачи ответа клиенту. Скорость задаётся в байтах в секунду. - -Ограничение работает только для одного соединения, то есть, -если клиент откроет 2 соединения, то суммарная скорость будет в 2 раза -выше ограниченной. +Значение 0 (установка по умолчанию) отключает ограничение скорости. + +Ограничение срабатывает только для одного соединения, то есть если +клиент откроет 2 соединения, то суммарная скорость будет в 2 раза +выше заданного ограничения. -Если необходимо ограничить скорость для части клиентов на уровне сервера, -то директива limit_rate для этого не подходит. Вместо этого следует -задать нужную скорость переменной $limit_rate: +Если необходимо ограничить скорость для части клиентов на уровне +сервера, то директива limit_rate +для этого не подходит. +Вместо этого следует задать желаемое ограничение скорости в переменной +$limit_rate: server { if ($slow) { - set $limit_rate 4k; + set $limit_rate 4k; } ... @@ -586,18 +802,26 @@ -размер - -http, server, location, if в location +размер +0 +http +server +location +if в location +0.8.0 -Директива (0.8.0) задаёт объём данных, после передачи которого -начинает ограничиваться скорость передачи ответа клиенту, например: +Задаёт начальный объём данных, после передачи которого начинает +ограничиваться скорость передачи ответа клиенту. + + + +Пример: location /flv/ { flv; - limit_rate_after 500k; - limit_rate 50k; + limit_rate_after 500k; + limit_rate 50k; } @@ -605,127 +829,318 @@ + +off | on | always +on +http +server +location +1.1.0 +1.0.6 + + +Управляет закрытием соединений с клиентами. + + + +Со значение по умолчанию “on” nginx будет +ждать и +обрабатывать дополнительные данные, +поступающие от клиента, перед полным закрытием соединения, но только +если эвристика указывает на то, что клиент может ещё послать данные. + + + +Со значением “always” nginx всегда будет +ждать и обрабатывать дополнительные данные, поступающие от клиента. + + + +Со значением “off” nginx не будет ждать поступления +дополнительных данных и сразу же закроет соединение. +Это нарушает протокол, поэтому не следует это использовать без нужды. + + + + + + +время +30s +http +server +location + + +Если действует , +эта директива задаёт максимальное время, в течение которого nginx +будет обрабатывать (читать и игнорировать) дополнительные данные, +поступающие от клиента. +По прошествии этого времени соединение будет закрыто, даже если +будут ещё данные. + + + + + + +время +5s +http +server +location + + +Если действует , эта директива задаёт +максимальное время ожидания поступления дополнительных данных от клиента. +Если в течение этого времени данные не были получены, соединение закрывается. +Иначе данные читаются и игнорируются, затем nginx снова ждёт поступления данных. +Цикл “ждать-читать-игнорировать” повторяется, но не дольше чем задано +директивой . + + + + + -адрес:порт - [default|default_server| - [backlog=число | - rcvbuf=размер | - sndbuf=размер | - accept_filter=фильтр | - deferred | - bind | - ipv6only=[on|off] | - ssl]] - + + адрес[:порт] + [default_server] + [setfib=число] + [backlog=число] + [rcvbuf=размер] + [sndbuf=размер] + [accept_filter=фильтр] + [deferred] + [bind] + [ipv6only=on|off] + [ssl] + [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]] + + порт + [default_server] + [setfib=число] + [backlog=число] + [rcvbuf=размер] + [sndbuf=размер] + [accept_filter=фильтр] + [deferred] + [bind] + [ipv6only=on|off] + [ssl] + [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]] + + unix:путь + [default_server] + [backlog=число] + [rcvbuf=размер] + [sndbuf=размер] + [accept_filter=фильтр] + [deferred] + [bind] + [ssl] + [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]] *:80 | *:8000 server -Директива задаёт адрес и порт, на которых сервер принимает запросы. -Можно указать только адрес или только порт, кроме того, адрес может -быть именем сервера, например: +Задаёт адрес и порт для IP +или путь для UNIX-сокета, +на которых сервер будет принимать запросы. +Можно указать только адрес +или только порт. +Кроме того, адрес может быть именем хоста, например: -listen 127.0.0.1:8000; -listen 127.0.0.1; -listen 8000; -listen *:8000; -listen localhost:8000; +listen 127.0.0.1:8000; +listen 127.0.0.1; +listen 8000; +listen *:8000; +listen localhost:8000; -адреса IPv6 (0.7.36) задаются в квадратных скобках: +IPv6-адреса (0.7.36) задаются в квадратных скобках: -listen [::]:8000; -listen [fe80::1]; +listen [::]:8000; +listen [fe80::1]; + +UNIX-сокеты (0.8.21) задаются при помощи префикса “unix:”: + +listen unix:/var/run/nginx.sock; -Если указан только адрес, то используется порт 80. +Если указан только адрес, то используется порт 80. + + + +Если директива не указана, то используется либо *:80 +(если nginx работает с привилегиями суперпользователя), +либо *:8000. -Если директива не указана, то используется порт *:80, если nginx работает -с правами пользователя root, или порт *:8000. - - - -Если у директивы есть параметр default, то сервер, в котором описана -эта директива, будет сервером по умолчанию для указанной пары адрес:порт. -Если же директив с параметром default нет, то сервером по умолчанию -будет первый сервер, в котором описана пара адрес:порт. -Начиная с версии 0.8.21, можно использовать параметр default_server. +Если у директивы есть параметр default_server, то сервер, +в котором описана эта директива, будет сервером по умолчанию для указанной пары +адрес:порт. +Если же директив с параметром default_server нет, то +сервером по умолчанию будет первый сервер, в котором описана пара +адрес:порт. +адрес:порт. + +До версии 0.8.21 этот параметр назывался просто +default. + -В директиве listen с параметром default можно также указать несколько -параметров, специфичных для системных вызовов listen(2) и bind(2). -Начиная с версии 0.8.21, эти параметры можно задать в любой директиве -listen, но только один раз для указанной пары адрес:порт. - - - -backlog=число — задаёт параметр backlog в вызове listen(2). -По умолчанию backlog равен -1 для FreeBSD и 511 для всех остальных -платформ. - - - -rcvbuf=размер — задаёт параметр SO_RCVBUF для слушающего сокета. - - - -sndbuf=размер — задаёт параметр SO_SNDBUF для слушающего сокета. - - - -accept_filter=фильтр — задаёт название accept-фильтра. -Работает только на FreeBSD, можно использовать два фильтра — dataready -и httpready. -По сигналу -HUP accept-фильтр можно менять только в последних -версиях FreeBSD, начиная с 6.0, 5.4-STABLE и 4.11-STABLE. - - - -deferred — указывает использовать отложенный accept(2) на Linux -с помощью опции TCP_DEFER_ACCEPT. - - - -bind — указывает, что для данной пары адрес:порт нужно делать bind(2) -отдельно. -Дело в том, что если описаны несколько директив listen с одинаковым портом, -но разными адресами и одна из директив listen слушает на всех адресах -для данного порта (*:порт), то nginx сделает bind(2) только на *:порт. -Необходимо учитывать, что в этом случае для определения адреса, на которой -пришло соединение, делается системный вызов getsockname(). -Если же используются параметры backlog, rcvbuf, sndbuf, accept_filter -или deferred, то для данной пары адрес:порт bind(2) всегда делается отдельно. - - - -ipv6only — параметр (0.7.42) задаёт значение параметра IPV6_V6ONLY +В директиве listen можно также указать несколько +дополнительных параметров, специфичных для системных вызовов +listen и bind. +Эти параметры можно задать в любой директиве listen, +но только один раз для указанной пары +адрес:порт. + +До версии 0.8.21 их можно было указывать лишь в директиве +listen с параметром default. + + + + +setfib=число + + +этот параметр (0.8.44) задаёт для слушающего сокета соответствующую +таблицу маршрутизации (FIB). +В настоящий момент это работает только на FreeBSD. + + + +backlog=число + + +задаёт параметр backlog в вызове +listen. +По умолчанию backlog равен -1 для FreeBSD +и 511 для других платформ. + + + +rcvbuf=размер + + +задаёт параметр SO_RCVBUF для слушающего сокета + + + +sndbuf=размер + + +задаёт параметр SO_SNDBUF для слушающего сокета + + + +accept_filter=фильтр + + +задаёт название accept-фильтра. +Работает только на FreeBSD, можно использовать два фильтра — +dataready и httpready. +По сигналу SIGHUP accept-фильтр можно менять только в +последних версиях FreeBSD, начиная с 6.0, 5.4-STABLE и 4.11-STABLE. + + + +deferred + + +указывает использовать отложенный accept на Linux +с помощью опции TCP_DEFER_ACCEPT. + + + +bind + + +указывает, что для данной пары +адрес:порт нужно делать +bind отдельно. +Дело в том, что если описаны несколько директив listen +с одинаковым портом, но разными адресами и одна из директив +listen слушает на всех адресах для данного порта +(*:порт, то nginx сделает +bind только на *:порт. +Необходимо заметить, что в этом случае для определения адреса, на которой +пришло соединение, делается системный вызов getsockname. +Если же используются параметры backlog, +rcvbuf, sndbuf, +accept_filter, deferred +или so_keepalive, то для данной пары +адрес:порт всегда делается +отдельный вызов bind. + + + +ipv6only=on|off + + +параметр (0.7.42) задаёт значение параметра IPV6_V6ONLY для слушающего сокета. Установить этот параметр можно только один раз на старте. - - - -ssl — параметр (0.7.14) не имеет отношения к системным вызовам -listen(2) и bind(2), а позволяет указать, что все соединения, -принимаемые на этом порту, должны работать в режиме SSL. + + + +ssl + + +этот параметр (0.7.14) не имеет отношения к системным вызовам +listen и bind, а позволяет указать, +что все соединения, принимаемые на этом порту, должны работать +в режиме SSL. Это позволяет задать компактную конфигурацию для сервера, -работающего сразу в двух режимах — HTTP и HTTPS. +работающего сразу в двух режимах — HTTP и HTTPS. -listen 80; -listen 443 default ssl; +listen 80; +listen 443 default ssl; - + + + +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+) +их можно сконфигурировать с помощью аргументов keepidle, +keepintvl и keepcnt. +Один или два аргумента могут быть опущены, в таком случае для +соответствующей опции сокета будут действовать стандартные +системные настройки. +Например, +so_keepalive=30m::10 +установит таймаут бездействия (TCP_KEEPIDLE) в 30 минут, +для интервала проб (TCP_KEEPINTVL) будет действовать +стандартная системная настройка, а счётчик проб (TCP_KEEPCNT) +будет равен 10. + -Пример использования параметров: +Пример: -listen 127.0.0.1 default accept_filter=dataready backlog=1024; +listen 127.0.0.1 default accept_filter=dataready backlog=1024; @@ -733,101 +1148,126 @@ -[=|~|~*|^~|@] /uri/ +[ + = | + ~ | + ~* | + ^~ + ] uri +@имя server +location -Директива устанавливает конфигурацию в зависимости от URI запроса. -location можно задать обычной строкой или регулярным выражением. -Регулярные выражения задаются префиксом "~*" — без учёта регистра -символов, и "~" — с учётом. -Для определения соответствия location'а и запроса -сначала проверяются location'ы, заданные обычными строками. +Устанавливает конфигурацию в зависимости от URI запроса. +location можно задать префиксной строкой или регулярным выражением. +Регулярные выражения задаются либо с префиксом “~*” +(для поиска совпадения без учёта регистра символов), +либо с префиксом “~” (с учётом регистра). +Чтобы найти location, соответствующий запросу, вначале проверяются +location'ы, заданные префиксными строками (префиксные location'ы). Среди них ищется максимальное совпадение. -Затем проверяются регулярные выражения. -В отличие от обычных строк, они не сортируются, а проверяются в порядке -их следования в конфигурационном файле. -Проверка регулярных выражений прекращается после первого же совпадения. +Затем проверяются регулярные выражения, в порядке их следования +в конфигурационном файле. +Проверка регулярных выражений прекращается после первого же совпадения, +и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, то используется -конфигурация максимально совпавшего location'а. +конфигурация максимально совпавшего префиксного location'а. -Для операционных систем, не чувствительных к регистру символов, таких -как Mac OS X и Cygwin, проверка обычных строк делается без учёта -регистра (0.7.7). +location'ы могут быть вложенными, с некоторыми исключениями, +о которых говорится ниже. + + + +Для операционных систем, нечувствительных к регистру символов, таких +как Mac OS X и Cygwin, сравнение с префиксными строками производится +без учёта регистра (0.7.7). Однако, сравнение ограничено только однобайтными locale'ями. -Регулярное выражение может содержать выделения (0.7.40), которые -могут затем использоваться в других директивах. +Регулярные выражения могут содержать выделения (0.7.40), которые могут +затем использоваться в других директивах. -Если нужно запретить проверку регулярных выражений после проверки -обычных строк, то это можно сделать с помощью префикса "^~". -Если у максимально совпавшего location'а есть этот префикс, то -регулярные выражения не проверяются. +Если у максимального совпавшего префиксного location'а указан префикс +“^~”, то регулярные выражения не проверяются. -Кроме того, с помощью префикса "=" можно задать точное совпадение -URI и location. При совпадении поиск сразу же прекращается, так как -дальше искать не имеет смысла. Например, если запрос "/" очень частый, -то указав "location = /", можно ускорить обработку этого запроса, -так как поиск location прекратится после первого же сравнения. +Кроме того, с помощью префикса “=” можно задать точное +совпадение URI и location. +При точном совпадении поиск сразу же прекращается. +Например, если запрос “/” случается часто, то +указав “location = /”, можно ускорить обработку +этих запросов, так как поиск прекратится после первого же сравнения. +Очевидно, что такой location не может иметь вложенные location'ы. -В версиях с 0.7.1 по 0.8.41, если запрос точно совпал с обычным location'ом -без префиксов "=" и "^~", то поиск тоже сразу же прекращается и -регулярные выражения также не проверяются. + +В версиях с 0.7.1 по 0.8.41, если запрос точно совпал с префиксным +location'ом без префиксов “=” и “^~”, +то поиск тоже сразу же прекращается и регулярные выражения также +не проверяются. + Проиллюстрируем вышесказанное примером: -location = / { - [ конфигурация A ] +location = / { + [ конфигурация А ] } -location / { - [ конфигурация B ] +location / { + [ конфигурация Б ] } location ^~ /images/ { - [ конфигурация C ] + [ конфигурация В ] } location ~* \.(gif|jpg|jpeg)$ { - [ конфигурация D ] + [ конфигурация Г ] } -Для запроса "/" будет выбрана конфигурация A, -для запроса "/documents/document.html" — конфигурация B, -для запроса "/images/1.gif" — конфигурация C, -для запроса "/documents/1.jpg" — конфигурация D. +Для запроса “/” будет выбрана конфигурация А, +для запроса “/documents/document.html” — конфигурация Б, +для запроса “/images/1.gif” — конфигурация В, +а для запроса “/documents/1.jpg” — конфигурация Г. -Префикс "@" задаёт именованный location. Такой location не используется -при обычной обработке запросов, а предназначен только для перенаправления -в него запросов. +Префикс “@” задаёт именованный location. +Такой location не используется при обычной обработке запросов, а +предназначен только для перенаправления в него запросов. +Такие location'ы не могут быть вложенными и не могут содержать +вложенные location'ы. + + -[on|off] +on | off on -http, server, location +http +server +location -Директива разрешает или запрещает записывать в error_log +Разрешает или запрещает записывать в + ошибки о том, что файл не найден. @@ -835,12 +1275,14 @@ -[on|off] +on | off off -http, server, location +http +server +location -Директива разрешает или запрещает записывать в +Разрешает или запрещает записывать в подзапросы. @@ -848,51 +1290,74 @@ + +число + +http +server +location + + +Ограничивает максимальное допустимое число диапазонов в запросах с +указанием диапазона запрашиваемых байт (byte-range requests). +Запросы, превышающие указанное ограничение, обрабатываются как +если бы они не содержали указания диапазонов. +По умолчанию ограничения нет. +Значение 0 полностью запрещает поддержку диапазонов. + + + + + -[on|off] +on | off on -http, server +http +server -Директива разрешает или запрещает объединять в URI два и более слэшей в один. +Разрешает или запрещает преобразование URI путём замены двух и более подряд +идущих слэшей (“/”) в один. -Необходимо иметь ввиду, что это объединение необходимо для корректной -проверки location'ов и регулярных выражений. -Например, запрос "//scripts/one.php" не попадает в +Необходимо иметь ввиду, что это преобразование необходимо для корректной +проверки префиксных строк и регулярных выражений. +Если его не делать, то запрос “//scripts/one.php” не попадёт в location /scripts/ { ... } -и может быть обслужен как статический файл, -поэтому он приводится в "/scripts/one.php". +и может быть обслужен как статический файл. +Поэтому он преобразуется к виду “/scripts/one.php”. -Выключение объединения может понадобиться, если в URI используются имена, -закодированные методом base64, который использует символ "/". -Но по соображениям безопасности лучше избегать выключения объединения. +Запрет преобразования может понадобиться, если в URI используются имена, +закодированные методом base64, в котором задействован символ “/”. +Однако по соображениям безопасности лучше избегать отключения преобразования. -Если директива указана на уровне server в сервере по умолчанию, -то её значение распространяется на все виртуальные сервера, слушающие -на том же адресе и порту. +Если директива указана на уровне + +в сервере по умолчанию, то её значение распространяется на +все виртуальные сервера, слушающие на том же адресе и порту. -[on|off] +on | off on -http, server, location +http +server +location -Директива разрешает или запрещает добавлять в ответы для MSIE -со статусом больше 400 +Разрешает или запрещает добавлять в ответы для MSIE со статусом больше 400 комментарий для увеличения размера ответа до 512 байт. @@ -900,26 +1365,33 @@ -[on|off] +on | off off -http, server, location +http +server +location -Директива разрешает или запрещает выдавать для MSIE refresh'ы вместо -редиректов. +Разрешает или запрещает выдавать для MSIE клиентов refresh'ы вместо +перенаправлений. -max=N [inactive=время]|off +off + +max=N +[inactive=время] off -http, server, location +http +server +location -Директива задаёт кэш, в котором могут хранится +Задаёт кэш, в котором могут храниться: @@ -931,43 +1403,57 @@ -информация об ошибках поиска файла — нет файла, нет прав на чтение -и тому подобное. Кэширование ошибок нужно разрешить директивой +информация об ошибках поиска файла — “нет файла”, “нет прав на чтение” +и тому подобное. + +Кэширование ошибок нужно разрешить отдельно директивой . + -Параметры директивы: - - - -max — задаёт максимальное число элементов в кэше; +У директивы есть следующие параметры: + + + +max + + +задаёт максимальное число элементов в кэше; при переполнении кэша удаляются наиболее давно не используемые элементы (LRU); - - - -inactive — задаёт время, после которого элемент кэша удаляется, -если к нему не было обращений в течение этого времени; -по умолчанию 60 секунд; - - - -off — запрещает кэш. - + + + +inactive + + +задаёт время, после которого элемент кэша удаляется, если к нему +не было обращений в течение этого времени; по умолчанию 60 секунд; + + + +off + + +запрещает кэш. + -Пример использования: +Пример: -open_file_cache max=1000 inactive=20s; +open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; + @@ -975,100 +1461,167 @@ -on|off +on | off off -http, server, location +http +server +location -Директива определяет, кэшировать или нет ошибки поиска файлов в +Разрешает или запрещает кэширование ошибок поиска файлов в . - -число -1 -http, server, location + + + + +число +1 +http +server +location + + +Задаёт минимальное число обращений к файлу +в течение времени, заданного параметром inactive +директивы , после которого дескриптор +файла будет оставаться открытым в кэше. -время -60 -http, server, location +время +60s +http +server +location -Директива определяет, через какое время нужно проверять актуальность -информации об элементе в . - +Определяет время, через которое следует проверять актуальность информации +об элементе в +. + -[on|off] -on -http, server - - -Устаревшая директива. - +on | off +off +http +server -Директива разрешает или запрещает оптимизировать проверку имени хоста -в name-based виртуальных серверах. -Проверка в частности влияет на имя хоста, используемого в редиректах. +Директива устарела, вместо неё следует использовать директиву +. + + + -[on|off] +on | off on -http, server, location +http +server +location + + +Разрешает или запрещает указывать порт в перенаправлениях, выдаваемых nginx'ом. + -Директива разрешает или запрещает указывать порт в редиректах, -выдаваемых nginx'ом. +См. также директиву . + + + + + + +размер +1460 +http +server +location + + +Если это возможно, то отправка данных клиенту будет отложена пока nginx не +накопит по крайней мере указанное количество байт для отправки. +Значение 0 запрещает отложенную отправку данных. -размер +размер 0 -http, server, location +http +server +location -Директива задаёт ядру размер предчтения при работе с файлами. -Под Линуксом используется системный вызов - -posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL); - -поэтому размер игнорируется. +Задаёт ядру размер предчтения при работе с файлами. -Под FreeBSD используется fcntl(O_READAHEAD, размер), появившийся -во FreeBSD-9 CURRENT. Для FreeBSD 7 нужно установить +На Linux используется системный вызов +posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL), +поэтому аргумент размер там игнорируется. + + + +На FreeBSD используется системный вызов +fcntl(O_READAHEAD,размер), +появившийся во FreeBSD 9.0-CURRENT. +Для FreeBSD 7 необходимо установить патч. @@ -1076,64 +1629,113 @@ -[on|off] +on | off off -http, server, location +http +server +location -Директива разрешает или запрещает делать несколько перенаправлений через -директиву . +Разрешает или запрещает делать несколько перенаправлений через директиву +. + + + + + + +размер +4k +http +server + + +Позволяет производить точную настройку выделений памяти +под конкретные запросы. +Эта директива не оказывает существенного влияния на +производительность и её не следует использовать. -[on|off] + + on | off off -http, server, location +http +server +location -Директива разрешает или запрещает сбрасывать соединение по таймауту. -Сброс делается следующим образом — перед закрытием сокета для него -ставится опция SO_LINGER с таймаутом 0. После чего при закрытии сокета -клиенту отсылается пакет RST, а всё память, связанная с этим сокетом, -освобождается. Это позволяет избежать длительного нахождения уже закрытого -сокета в состоянии FIN_WAIT1 с заполненными буферами. +Разрешает или запрещает сброс соединений по таймауту. +Сброс делается следующим образом — перед закрытием сокета для него +ставится опция +SO_LINGER +с таймаутом 0. +После чего при закрытии сокета клиенту отсылается TCP RST, а вся память, +связанная с этим сокетом, освобождается. +Это позволяет избежать длительного нахождения уже закрытого сокета в +состоянии FIN_WAIT1 с заполненными буферами. -Необходимо отметить, что соединения, находящиеся в состоянии keepalive, -по истечении таймаута закрываются обычным образом. +Необходимо отметить, что keep-alive соединения по истечении таймаута +закрываются обычным образом. -адрес + +адрес ... +[valid=время] + -http, server, location +http +server +location -Директива задаёт адрес name-сервера, например: +Задаёт серверы DNS, используемые для преобразования имён апстрим серверов +в адреса, например: - resolver 127.0.0.1; +resolver 127.0.0.1 192.0.2.1; +Аргумент адрес может быть задан либо +IPv4-адресом, либо именем хоста; +во втором случае используется первый полученный IPv4-адрес. +Серверы DNS опрашиваются циклически. + +До версии 1.1.7 можно было задать лишь один DNS-сервер. + +По умолчанию nginx кэширует ответы, используя значение TTL из ответа. +Необязательный параметр valid позволяет это +переопределить: + +resolver 127.0.0.1 192.0.2.1 valid=30s; + + +До версии 1.1.9 настройка времени кэширования была невозможна +и nginx всегда кэшировал ответы на срок в 5 минут. + -время +время 30s -http, server, location +http +server +location -Директива задаёт таймаут для определения имени, например: +Задаёт таймаут для преобразования имени в адрес, например: - resolver_timeout 5s; +resolver_timeout 5s; @@ -1141,28 +1743,34 @@ -путь +путь html -http, server, location, if в location +http +server +location +if в location -Директива задаёт корневой каталог для запросов. +Задаёт корневой каталог для запросов. Например, при такой конфигурации - location /i/ { - root /data/w3; - } +location /i/ { + root /data/w3; +} -на запрос "/i/top.gif" будет отдан файл "/data/w3/i/top.gif". +в ответ на запрос “/i/top.gif” будет отдан файл +/data/w3/i/top.gif. -В значении пути можно использовать переменные. +В значении аргумента путь можно использовать переменные, +кроме $document_root и $realpath_root. -Путь к файлу формируется как простое добавление URI к значению директивы root. -Если же необходима модификация URI, то нужно воспользоваться директивой +Путь к файлу формируется путём простого добавления URI к значению директивы +root. +Если же URI необходимо поменять, следует воспользоваться директивой . @@ -1170,23 +1778,31 @@ -all|any +all | any all +http +server location -Директива разрешает доступ при хотя бы одной успешной проверке, -выполненной модулями ngx_http_access_module -или ngx_http_auth_basic_module: +Разрешает доступ, если оба (all) +или хотя бы один (any) из модулей +ngx_http_access_module +и ngx_http_auth_basic_module +разрешают доступ. + + + +Пример: location / { - satisfy any; - - allow 192.168.1.0/32; - deny all; - - auth_basic "closed site"; - auth_basic_user_file conf/htpasswd; + satisfy any; + + allow 192.168.1.0/32; + deny all; + + auth_basic "closed site"; + auth_basic_user_file conf/htpasswd; } @@ -1195,40 +1811,91 @@ -on|off +on | off off +http +server location -Директива переименована в директиву . +Эта директива была переименована в директиву +satisfy any. + + + + + + +размер +0 +http +server +location + + +При установке в ненулевое значение nginx будет пытаться минимизировать +число операций отправки на клиентских сокетах либо при помощи флага +NOTE_LOWAT метода +, +либо при помощи опции сокета SO_SNDLOWAT, +с указанным размером. + + + +Эта директива игнорируется на Linux, Solaris и Windows. -время -60 -http, server, location +время +60s +http +server +location -Директива задаёт таймаут при передаче ответа клиенту. +Задаёт таймаут при передаче ответа клиенту. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями записями. Если по истечении этого времени клиент ничего не примет, -то nginx закрывает соединение. +соединение будет закрыто. -[on|off] + +on | off off -http, server, location +http +server +location +if в location -Директива разрешает или запрещает использовать sendfile(). +Разрешает или запрещает использовать +sendfile. + + + + + + + +размер +0 +http +server +location + + +При установке в ненулевое значение ограничивает объём данных, +который может передан за один вызов sendfile. +Без этого ограничения одно быстрое соединение может целиком +захватить рабочий процесс. @@ -1240,14 +1907,14 @@ http -Директива задаёт конфигурацию для виртуального сервера. -Чёткого разделения виртуальных серверов ip-based (на основании ip-адреса) -и name-based (на основании имени, передаваемого в строке "Host" -заголовка запроса), нет. -Вместо этого директивами описываются все адреса -и порты, на которых нужно принимать соединения для этого сервера, -и в директиве указываются все имена серверов. -Пример конфигурации описан в +Задаёт конфигурацию для виртуального сервера. +Чёткого разделения виртуальных серверов на IP-based (на основании IP-адреса) +и name-based (на основании поля
Host
заголовка запроса) нет. +Вместо этого директивами описываются все +адреса и порты, на которых нужно принимать соединения для этого сервера, +а в директиве указываются все имена серверов. +Пример конфигурации описан в документе по + настройке виртуальных серверов.
@@ -1255,27 +1922,26 @@ -имя [...] -hostname +имя ... +"" server -Директива задаёт имена виртуального сервера, например: +Задаёт имена виртуального сервера, например: server { - server_name example.com www.example.com; + server_name example.com www.example.com; } Первое имя становится основным именем сервера. -По умолчанию используется имя машины (hostname). -В именах серверов можно использовать "*" для замены первой или последней -части имени: +В именах серверов можно использовать звёздочку (“*”) +для замены первой или последней части имени: server { - server_name example.com *.example.com www.example.*; + server_name example.com *.example.com www.example.*; } @@ -1284,94 +1950,103 @@ Два первых вышеприведённых имени можно объединить в одно: server { - server_name .example.com; -} - -
- - -Кроме того, в качестве имени сервера можно использовать регулярное -выражение, указав перед ним "~": - -server { - server_name www.example.com ~^www\d+\.example\.com$; + server_name .example.com; } -Регулярное выражение может содержать выделения (0.7.40), которые -могут затем использоваться в других директивах: +Если аргумент равен “$hostname” (0.9.4), то +подставляется имя хоста (hostname) машины. + + + +В качестве имени сервера можно также использовать регулярное выражение, +указав перед ним тильду (“~”): server { - server_name ~^(www\.)?(.+)$; + server_name www.example.com ~^www\d+\.example\.com$; +} + + + + +Регулярное выражение может содержать выделения (0.7.40), +которые могут затем использоваться в других директивах: + +server { + server_name ~^(www\.)?(.+)$; location / { - root /sites/$2; + root /sites/$2; } } server { - server_name _; + server_name _; location / { - root /sites/default; + root /sites/default; } } -Начиная с 0.8.25, именованные выделения в регулярном выражении создают -переменные, которые могут затем использоваться в других директивах: +Именованные выделения в регулярном выражении создают переменные (0.8.25), +которые могут затем использоваться в других директивах: server { - server_name ~^(www\.)?(?<domain>.+)$; + server_name ~^(www\.)?(?<domain>.+)$; location / { - root /sites/$domain; + root /sites/$domain; } } server { - server_name _; + server_name _; location / { - root /sites/default; + root /sites/default; } } -Начиная с 0.7.11, можно использовать пустое имя "": +Возможно также указать пустое имя сервера (0.7.11): server { - server_name www.example.com ""; + server_name www.example.com ""; } -что позволяет обрабатывать запросы без строки "Host" в заголовке запроса -в этом сервере, а не в сервере по умолчанию для данной пары адрес:порт. +Это позволяет обрабатывать запросы без поля
Host
заголовка +запроса в этом сервере, а не в сервере по умолчанию для данной пары адрес:порт. +Это настройка по умолчанию. + +До 0.8.48 по умолчанию использовалось имя хоста (hostname) машины. +
Порядок проверки имён следующий: - + -полные имена, +полные имена -имена с маской в начале имени — *.example.com, +имена с маской в начале имени, например “*.example.com -имена с маской в конце имени — mail.*, +имена с маской в конце имени, например “mail.* -регулярные выражения. +регулярные выражения @@ -1381,71 +2056,81 @@ -[on|off] -on -http, server, location +on | off +off +http +server +location -Директива разрешает или запрещает использовать в редиректах, выдаваемых -nginx'ом, основное имя сервера, задаваемое директивой +Разрешает или запрещает использовать в перенаправлениях, выдаваемых nginx'ом, +основное имя сервера, задаваемое директивой . -Если использование основного имени запрещено, то используется имя, -указанного в строке "Host" в заголовке запроса. -Если же этой строки нет, то используется IP-адрес сервера. +Если запрещено, то используется имя, указанное в поле
Host
+заголовка запроса. +Если же этого поля нет, то используется IP-адрес сервера.
-
- - - -число -512 -http - -Директива задаёт максимальный размер хэш-таблиц имён серверов. -Подробнее смотри в описании -настройки хэшей. +См. также директиву . -число -32/64/128 +размер +32|64|128 http -Директива задаёт размер корзины в хэш-таблицах имён серверов. +Задаёт размер корзины в хэш-таблицах имён серверов. Значение по умолчанию зависит от размера строки кэша процессора. -Подробнее смотри в описании -настройки хэшей. +Подробнее смотрите в документе по +настройке хэшей. + + + + + + +размер +512 +http + + +Задаёт максимальный размер хэш-таблиц имён серверов. +Подробнее смотрите в документе по +настройке хэшей. -[on|off] +on | off on -http, server, location +http +server +location -Директива разрешает или запрещает выдавать версию nginx'а -в сообщениях об ошибках и в строке заголовка ответа "Server". +Разрешает или запрещает выдавать версию nginx'а в сообщениях об ошибках и +в поле
Server
заголовка ответа.
-[on|off] +on | off on -http, server, location +http +server +location -Директива разрешает или запрещает использовать опцию TCP_NODELAY. +Разрешает или запрещает использование опции TCP_NODELAY. Опция включаются только при переходе соединения в состояние keep-alive. @@ -1453,24 +2138,27 @@ -[on|off] +on | off off -http, server, location +http +server +location -Директива разрешает или запрещает использовать опции -TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. +Разрешает или запрещает использование опции сокета +TCP_NOPUSH во FreeBSD или +TCP_CORK в Linux. Опции включаются только при использовании . Включение опции позволяет -передавать заголовок ответа и начало файла в одном пакете в Linux -и во FreeBSD 4.x; +передавать заголовок ответа и начало файла в одном пакете +в Linux и во FreeBSD 4.*; -передавать файл в полных пакетах. +передавать файл полными пакетами. @@ -1480,22 +2168,45 @@ -файл [файл ...] (uri|=код) + + файл ... + uri + + + файл ... + =код + +server location -Директива проверяет существование файлов в заданном порядке -и использует для обработки запроса первый найденный файл, причём -обработка делается в контексте этого же location'а. -С помощью слэша в конце имени можно задать проверку существования -каталога, например, так — "$uri/". -В случае, если ни один файл не найден, то делается внутренний редирект -на последний параметр. -Последний параметр может быть кодом (0.7.51): +Проверяет существование файлов в заданном порядке и использует +для обработки запроса первый найденный файл, причём обработка +делается в контексте этого же location'а. +Путь к файлу строится из аргумента файл +в соответствии с директивами + и . +С помощью слэша в конце имени можно проверить существование каталога, +например, “$uri/”. +В случае, если ни один файл не найден, то делается внутреннее +перенаправление на uri, заданный последним аргументом. +Например: + +location /images/ { + try_files $uri /images/default.gif; +} + +location = /images/default.gif { + expires 30s; +} + +Последний аргумент может также указывать на именованный location, +смотрите примеры ниже. +С версии 0.7.51 последний аргумент может также быть кодом: location / { - try_files $uri $uri/index.html $uri.html =404; + try_files $uri $uri/index.html $uri.html =404; } @@ -1504,13 +2215,13 @@ Пример использования при проксировании Mongrel: location / { - try_files /system/maintenance.html - $uri $uri/index.html $uri.html - @mongrel; + try_files /system/maintenance.html + $uri $uri/index.html $uri.html + @mongrel; } location @mongrel { - proxy_pass http://mongrel; + proxy_pass http://mongrel; } @@ -1519,57 +2230,57 @@ Пример использования вместе с Drupal/FastCGI: location / { - try_files $uri $uri/ @drupal; + 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; + 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; ... прочие fastcgi_param } 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; + fastcgi_pass ...; + + fastcgi_param SCRIPT_FILENAME /path/to/index.php; + fastcgi_param SCRIPT_NAME /index.php; + fastcgi_param QUERY_STRING q=$uri&$args; ... прочие fastcgi_param } -В этом примере директива try_files +В следующем примере директива try_files location / { - try_files $uri $uri/ @drupal; + try_files $uri $uri/ @drupal; } аналогична директивам location / { - error_page 404 = @drupal; - log_not_found off; + 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 $uri @drupal; + + fastcgi_pass ...; + + fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... } -try_files тестирует существование PHP-файла, +try_files проверяет существование PHP-файла, прежде чем передать запрос FastCGI-серверу.
@@ -1577,22 +2288,22 @@ Пример использования вместе с Wordpress и Joomla: location / { - try_files $uri $uri/ @wordpress; + try_files $uri $uri/ @wordpress; } location ~ \.php$ { - try_files $uri @wordpress; - - fastcgi_pass ...; - - fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; + try_files $uri @wordpress; + + fastcgi_pass ...; + + fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... прочие fastcgi_param } location @wordpress { - fastcgi_pass ...; - - fastcgi_param SCRIPT_FILENAME /path/to/index.php; + fastcgi_pass ...; + + fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... прочие fastcgi_param } @@ -1608,207 +2319,354 @@ image/gif gif; image/jpeg jpg;
-http, server, location +http +server +location -Директива задаёт соответствие расширения и MIME-типов ответов. -Одному MIME-типу может соответствовать несколько расширений. +Задаёт соответствие расширений имён файлов и MIME-типов ответов. +Расширения нечувствительны к регистру символов. +Одному MIME-типу может соответствовать несколько расширений, например: + +types { + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; +} + + + + +Достаточно полная таблица соответствий входит в дистрибутив nginx +и находится в файле conf/mime.types. -Достаточно полная таблица соответствий входит в дистрибутив -и находится в файле conf/mime.types. +Для того, чтобы для определённого location'а для всех ответов +выдавался MIME-тип “application/octet-stream”, +можно использовать следующее: + +location /download/ { + types { } + default_type application/octet-stream; +} + +
+ + + +размер +32|64|128 +http +server +location + -Для того, чтобы для определённого location'а для всех ответов выдавался -MIME-тип "application/octet-stream", можно использовать следующее: - -location /download/ { - types { } - default_type application/octet-stream; -} - +Задаёт размер корзины в хэш-таблицах типов. +Значение по умолчанию зависит от размера строки кэша процессора. +Подробнее смотрите в документе по +настройке хэшей. + + + + + + +размер +1024 +http +server +location + + +Задаёт максимальный размер хэш-таблиц типов. +Подробнее смотрите в документе по +настройке хэшей. -[on|off] +on | off off -http, server +http +server -Директива разрешает или запрещает использование символов подчёркивания -в строках заголовка запроса клиента. +Разрешает или запрещает использование символов подчёркивания в +полях заголовка запроса клиента. +Если запрещено, поля заголовка запроса, в чьих именах есть подчёркивания, +помечаются как недопустимые и подпадают под действие директивы +. + + + + + + +размер +64 +http + + +Задаёт размер корзины в хэш-таблице переменных. +Подробнее смотрите в документе по +настройке хэшей. + + + + + + +размер +512 +http + + +Задаёт максимальный размер хэш-таблицы переменных. +Подробнее смотрите в документе по +настройке хэшей.
- -
+
-Модуль ngx_http_core_module поддерживает встроенные переменные, имена -которых совпадают с именами переменных в Apache. -Прежде всего, это переменные, представляющие из себя строки заголовка -запроса клиента, например, $http_user_agent, $http_cookie -и тому подобное. Кроме того, есть и другие переменные: - - - -$args, эта переменная равна аргументам в строке запроса; - - - -$arg_name, эта переменная равна аргументу name -в строке запроса; - - - -$binary_remote_addr, эта переменная равна адресу клиента в бинарном виде, -длина её значения всегда 4 байта; - - - -$content_length, эта переменная равна строке "Content-Length" в заголовке -запроса; - - - -$content_type, эта переменная равна строке "Content-Type" в заголовке запроса; - - - -$cookie_name, эта переменная равна cookie name; - - - -$document_root, эта переменная равна значению директивы root для -текущего запроса; - - - -$document_uri, то же самое, что и $uri; - - - -$host, эта переменная равна строке "Host" в заголовке запроса -или имени сервера, на который пришёл запрос, если этой строки нет; - - - -$hostname, эта переменная равна имени хоста; - - - -$http_name, эта переменная равна строке name -в заголовке запроса; - - - -$is_args, эта переменная равна "?", если в строке запроса есть аргументы, -и пустой строке, если их нет; - - - -$limit_rate, эта переменная позволяет установить ограничение -скорости соединения; - - - -$pid, эта переменная равна номеру рабочего процесса; - - - -$request_method, эта переменная равна методу запроса, -обычно это "GET" или "POST"; - - - -$remote_addr, эта переменная равна адресу клиента; - - - -$remote_port, эта переменная равна порту клиента; - - - -$remote_user, эта переменная равна имени пользователя, используемого -в Basic аутентификации; - - - -$realpath_root, эта переменная равна значению директивы root для -текущего запроса, при этом все символические ссылки преобразованы -в реальные путь; - - - -$request_filename, эта переменная равна пути к файлу для текущего -запроса, формируемому из директив root или alias и URI запроса; - - - -$request_body, эта переменная содержит тело запроса. -Значение переменной появляется в location'ах, обрабатываемых директивами +Модуль ngx_http_core_module поддерживает встроенные переменные, +имена которых совпадают с именами переменных веб-сервера Apache. +Прежде всего, это переменные, представляющие из себя поля заголовка +запроса клиента, такие как $http_user_agent, $http_cookie +и тому подобное. +Кроме того, есть и другие переменные: + + +$arg_имя + +аргумент имя в строке запроса + + +$args + +аргументы в строке запроса + + +$binary_remote_addr + +адрес клиента в бинарном виде, длина значения всегда 4 байта + + +$body_bytes_sent + +число байт, переданное клиенту, без учёта заголовка ответа + + +$content_length + +поле
Content-Length
заголовка запроса +
+ +$content_type + +поле
Content-Type
заголовка запроса +
+ +$cookie_имя + +cookie имя + + +$document_root + +значение директивы для текущего запроса + + +$document_uri + +то же, что и $uri + + +$host + +поле
Host
заголовка запроса, +или имя сервера, соответствующего запросу, если этого поля нет +
+ +$hostname + +имя хоста + + +$http_имя + +поле имя заголовка запроса + + +$https + +“on” +если соединение работает в режиме SSL, +либо пустая строка + + +$is_args + +“?”, если в строке запроса есть аргументы, +и пустая строка, если их нет + + +$limit_rate + +позволяет ограничивать скорость соединения + + +$nginx_version + +версия nginx + + +$pid + +номер (PID) рабочего процесса + + +$query_string + +то же, что и $args + + +$realpath_root + +значение директивы для текущего запроса, +при этом все символические ссылки преобразованы в реальные путь + + +$remote_addr + +адрес клиента + + +$remote_port + +порт клиента + + +$remote_user + +имя пользователя, использованное в Basic аутентификации + + +$request + +оригинальная строка запроса целиком + + +$request_body + +тело запроса + +Значение переменной появляется в location'ах, обрабатываемых +директивами . -
- - -$request_body_file, эта переменная равна имени временного файла, в котором -хранится тело запроса. -По завершению работы файл необходимо удалить. -Для того, чтобы тело запроса клиента всегда записывалось в файл, нужно -указать client_body_in_file_only on. -При передаче имени в проксированном запросе или в запросе к FastCGI-серверу -следует запретить передачу самого тела директивами -"proxy_pass_request_body off" или -"fastcgi_pass_request_body off" соответственно. - - - -$request_uri, эта переменная равна полному первоначальному URI вместе -с аргументами; - - - -$query_string, то же самое, что и $args; - - - -$scheme, эта переменная равна схеме запроса — "http" или "https"; - - - -$server_protocol, эта переменная равна протоколу запроса, -обычно это "HTTP/1.0" или "HTTP/1.1"; - - - -$server_addr, эта переменная равна адресу сервера, на который пришёл запрос. -Как правило, для получения значения этой переменной делается один системный -вызов. Для того, чтобы избежать системного вызова, нужно указывать -адреса в директивах listen и использовать параметр bind; - - - -$server_name, эта переменная равна имени сервера, на который пришёл запрос; - - - -$server_port, эта переменная равна порту сервера, на который пришёл запрос; - - - -$uri, эта переменная равна текущему URI в запросе, он -может отличаться от первоначального, например, при внутренних редиректах -или при использовании индексных файлов. - +и +. +
+ + +$request_body_file + +имя временного файла, в котором хранится тело запроса + +По завершению обработки файл необходимо удалить. +Для того, чтобы тело запроса всегда записывалось в файл, +следует указать +client_body_in_file_only on. +При передаче имени временного файла в проксированном запросе +или в запросе к FastCGI-серверу следует запретить передачу самого +тела директивами + +proxy_pass_request_body off +или + +fastcgi_pass_request_body off +соответственно. + + + +$request_completion + +“OK” если запрос завершился, +либо пустая строка + + +$request_filename + +путь к файлу для текущего запроса, формируемый из директив + или и URI запроса + + +$request_method + +метод запроса, обычно +“GET” или “POST” + + +$request_uri + +оригинальный URI запроса целиком (с аргументами) + + +$scheme + +схема запроса, “http” или “https” + + +$sent_http_имя + +поле имя заголовка ответа + + +$server_addr + +адрес сервера, принявшего запрос + +Получение значения этой переменной обычно требует одного системного вызова. +Чтобы избежать системного вызова, в директивах +следует указывать адреса и использовать параметр bind. + + + +$server_name + +имя сервера, принявшего запрос + + +$server_port + +порт сервера, принявшего запрос + + +$server_protocol + +протокол сервера, обычно +“HTTP/1.0” +или +“HTTP/1.1” + + +$uri + +текущий URI запроса + +Он может отличаться от первоначального, например, при внутренних +перенаправлениях или при использовании индексных файлов. + +