# HG changeset patch # User Ruslan Ermilov # Date 1328027371 0 # Node ID b838f6e9192edad1a20b11ffbb28920d87f580d1 # Parent 8ad9df891e23b6bcd82136d69e29d65bfd392943 Revision. diff -r 8ad9df891e23 -r b838f6e9192e xml/ru/docs/http/ngx_http_rewrite_module.xml --- a/xml/ru/docs/http/ngx_http_rewrite_module.xml Mon Jan 30 19:34:03 2012 +0000 +++ b/xml/ru/docs/http/ngx_http_rewrite_module.xml Tue Jan 31 16:29:31 2012 +0000 @@ -2,47 +2,50 @@ -
-Модуль ngx_http_rewrite_module позволяет изменять URI с помощью -регулярных выражений, делать перенаправления и выбирать конфигурацию -в зависимости от переменных. Если директивы этого модуля описаны -на уровне сервера, то они выполняются до того, как определяется -location для запроса. Если в выбранном location тоже есть -директивы модуля ngx_http_rewrite_module, то они также выполняются. +Модуль ngx_http_rewrite_module позволяет +изменять URI с помощью регулярных выражений, делать перенаправления +и выбирать конфигурацию в зависимости от переменных. +Если директивы этого модуля описаны на уровне сервера, то они +выполняются до того, как определяется location для запроса. +Если в выбранном location тоже есть директивы модуля +ngx_http_rewrite_module, то они также выполняются. Если URI изменился в результате исполнения директив внутри location, -то снова определяется location для уже нового URI. Этот цикл может -повторяться до 10 раз, после чего nginx возвращает ошибку -"Server Internal Error" (500). +то снова определяется location для уже нового URI. +Этот цикл может повторяться до 10 раз, после чего nginx возвращает +ошибку .
-
+
-server, location, if +server +location +if -Директива завершает обработку текущего набора директив -ngx_http_rewrite_module. +Завершает обработку текущего набора директив модуля +ngx_http_rewrite_module. -Пример использования: +Пример: - if ($slow) { - limit_rate 10k; - break; - } +if ($slow) { + limit_rate 10k; + break; +} @@ -52,13 +55,16 @@ (условие) -server, location +server +location -Директива if проверяет истинность условия, если оно истинно, +Проверяет истинность условия. +Если оно истинно, то выполняется указанный в фигурных скобках код и запрос обрабатывается в соответствии с заданной там же конфигурацией. -Конфигурация внутри директивы if наследуется из предыдущего уровня. +Конфигурация внутри директивы if наследуется с +предыдущего уровня. @@ -66,69 +72,75 @@ -имя переменной; ложными значениями переменной являются пустая строка "" -или любая строка, начинающиеся на "0"; +имя переменной; ложными значениями переменной являются пустая строка “” +или любая строка, начинающаяся на “0”; -сравнение переменной со строкой с помощью операторов "=" и "!="; +сравнение переменной со строкой с помощью операторов +“=” и “!=”; -проверка переменной с помощью регулярного выражения без учёта -регистра символов — "~*" и с учётом — "~". +проверка переменной с помощью регулярного выражения с учётом +регистра символов — “~” и без него — “~*”. В регулярных выражениях можно использовать выделения, которые затем -доступны в виде переменных $1 — $9. -Также можно использовать отрицательные операторы "!~" и "!~*". -Если в регулярном выражении встречаются символы "}" или ";", то -всё выражение нужно заключить в одинарные или двойные кавычки. +доступны в виде переменных $1 — $9. +Также можно использовать отрицательные операторы “!~” +и “!~*”. +Если в регулярном выражении встречаются символы “}” +или “;”, то всё выражение нужно заключить в одинарные +или двойные кавычки. -проверка существования файла с помощью операторов "-f" и "!-f"; +проверка существования файла с помощью операторов “-f” +и “!-f”; -проверка существования каталога с помощью операторов "-d" и "!-d"; +проверка существования каталога с помощью операторов “-d” +и “!-d”; проверка существования файла, каталога или символической ссылки -с помощью операторов "-e" и "!-e"; +с помощью операторов “-e” и “!-e”; -проверка исполняемости файла с помощью операторов "-x" и "!-x". +проверка исполняемости файла с помощью операторов “-x” +и “!-x”. -Примеры использования: +Примеры: - if ($http_user_agent ~ MSIE) { - rewrite ^(.*)$ /msie/$1 break; - } +if ($http_user_agent ~ MSIE) { + rewrite ^(.*)$ /msie/$1 break; +} - if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) { - set $id $1; - } +if ($http_cookie ~* "id=([^;]+)(?:;|$)") { + set $id $1; +} - if ($request_method = POST ) { - return 405; - } +if ($request_method = POST) { + return 405; +} - if ($slow) { - limit_rate 10k; - } +if ($slow) { + limit_rate 10k; +} - if ($invalid_referer) { - return 403; - } +if ($invalid_referer) { + return 403; +} -Значение встроенной переменной $invalid_referer задаётся директивой +Значение встроенной переменной $invalid_referer задаётся директивой . @@ -138,11 +150,13 @@ код -server, location, if +server +location +if -Директива return завершает исполнение кода и возвращает клиенту -указанный код. Можно использовать следующие значения: 204, 400, +Завершает исполнение кода и возвращает клиенту указанный код. +Можно использовать следующие значения: 204, 400, 402 — 406, 408, 410, 411, 413, 416 и 500 — 504. Кроме того, нестандартный код 444 закрывает соединение без передачи заголовка ответа. @@ -152,93 +166,104 @@ -regex замена флаг + + regex + замена + [флаг] -server, location, if +server +location +if -Директива rewrite изменяет URI в соответствии с регулярным выражением -и строкой замены. Директивы выполняются в порядке их следования в -конфигурационном файле. С помощью флагов можно досрочно прекратить -исполнение директив. Если строка замены начинается с "http://", то -клиенту будет возвращено перенаправление и обработка директив также завершается. +Изменяет URI в соответствии с регулярным выражением и строкой замены. +Директивы выполняются в порядке их следования в конфигурационном файле. +С помощью флагов можно досрочно прекратить исполнение директив. +Если строка замены начинается с “http://”, то клиенту +будет возвращено перенаправление и обработка директив также завершается. Флаги могут быть следующими: - + - -last — завершает обработку текущего набора директив -ngx_http_rewrite_module, после чего ищется соответствие URI и location; - +last + +завершает обработку текущего набора директив модуля +ngx_http_rewrite_module, +после чего ищется соответствие URI и location; + - -break — завершает обработку текущего набора директив -ngx_http_rewrite_module; - +break + +завершает обработку текущего набора директив модуля +ngx_http_rewrite_module; + - -redirect — возвращает временное перенаправление с кодом 302; -используется, если заменяющая строка не начинается с "http://"; - +redirect + +возвращает временное перенаправление с кодом 302; +используется, если заменяющая строка не начинается с +“http://”; + - -permanent — возвращает постоянное перенаправление с кодом 301. - +permanent + +возвращает постоянное перенаправление с кодом 301. + - - - -Пример использования: +Пример: - rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; - rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; - return 403; +rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; +rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; +return 403; -Если же эти директивы поместить в location /download/, то нужно -заменить флаг last на break, иначе nginx сделает 10 циклов и вернёт -ошибку 500: +Если же эти директивы поместить в location “/download/”, +то нужно заменить флаг last на break, +иначе nginx сделает 10 циклов и вернёт ошибку 500: - location /download/ { - rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; - rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; - return 403; - } +location /download/ { + rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; + rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; + return 403; +} Если в строке замены указаны аргументы, то предыдущие аргументы запроса -добавляются после них. Можно отказаться от этого добавления, указав -в конце строки замены знак вопроса: +добавляются после них. +Можно отказаться от этого добавления, указав в конце строки замены знак вопроса: - rewrite ^/users/(.*)$ /show?user=$1? last; +rewrite ^/users/(.*)$ /show?user=$1? last; -Если в регулярном выражении встречаются символы "}" или ";", то -всё выражение нужно заключить в одинарные или двойные кавычки. +Если в регулярном выражении встречаются символы “}” +или “;”, то всё выражение нужно заключить в одинарные +или двойные кавычки. -переменная значение +переменная значение -server, location, if +server +location +if -Директива устанавливает значение для указанной переменной. +Устанавливает значение для указанной переменной. В качестве значения можно использовать текст, переменные и их комбинации. @@ -248,10 +273,13 @@ on | off on -http, server, location, if +http +server +location +if -Директива определяет, нужно ли писать в лог предупреждение +Определяет, нужно ли писать в лог предупреждение о неинициализированной переменной. @@ -260,76 +288,80 @@
-
+
-Директивы модуля ngx_http_rewrite_module компилируется на стадии -конфигурирования во внутренние коды, исполняемые во время запроса -интерпретатором. Интерпретатор представляет из себя простую -стековую виртуальную машину. +Директивы модуля ngx_http_rewrite_module +компилируются на стадии конфигурации во внутренние коды, +исполняемые во время запроса интерпретатором. +Интерпретатор представляет из себя простую стековую виртуальную машину. Например, директивы - location /download/ { - if ($forbidden) { - return 403; - } +location /download/ { + if ($forbidden) { + return 403; + } - if ($slow) { - limit_rate 10k; - } + if ($slow) { + limit_rate 10k; + } - rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break; - } + rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break; +} будет скомпилированы в такие коды: - переменная $forbidden - проверка на ноль - возврат 403 - завершение всего кода - переменная $slow - проверка на ноль - проверка регулярного выражения - копирование "/" - копирование $1 - копирование "/mp3/" - копирование $2 - копирование ".mp3" - завершение регулярного выражения +переменная $forbidden +проверка на ноль + возврат 403 завершение всего кода +переменная $slow +проверка на ноль +проверка регулярного выражения +копирование "/" +копирование $1 +копирование "/mp3/" +копирование $2 +копирование ".mp3" +завершение регулярного выражения +завершение всего кода -Обратите внимание, что кода для директивы limit_rate нет, поскольку -она не имеет отношения к модулю ngx_http_rewrite_module. Для блока -if создаётся такая же конфигурация, как и для блока location. +Обратите внимание, что кода для директивы + +нет, поскольку она не имеет отношения к модулю +ngx_http_rewrite_module. +Для блока создаётся такая же конфигурация, как и для блока +. Если условие истинно, то запрос получает конфигурацию, соответствующую -блоку if, и в этой конфигурации limit_rate равен 10k. +блоку if, +и в этой конфигурации limit_rate равен 10k. Директиву - rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break; +rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break; можно сделать на один код меньше, если в регулярном выражении включить первый слэш в скобки: - rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; +rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; тогда её коды будут выглядеть так: - проверка регулярного выражения - копирование $1 - копирование "/mp3/" - копирование $2 - копирование ".mp3" - завершение регулярного выражения - завершение всего кода +проверка регулярного выражения +копирование $1 +копирование "/mp3/" +копирование $2 +копирование ".mp3" +завершение регулярного выражения +завершение всего кода