Персональный | |
Директивы модуля ngx_http_rewrite_module
09.01.2007 Модуль ngx_http_rewrite_module позволяет изменять URI с помощью регулярных выражений, делать редиректы и выбирать конфигурацию в зависимости от переменных. Если директивы этого модуля описаны на уровне сервера, то они выполняются до того, как определяется location для запроса. Если в выбранном location тоже есть директивы модуля ngx_http_rewrite_module, то они также выполняются. Если URI изменился в результате исполнения директив внутри location, то снова определяется location для уже нового URI. Этот цикл может повторяться до 10 раз, после чего nginx возвращает ошибку "Server Internal Error" (500). СодержаниеДирективыВнутреннее устройствоДирективыsyntax: break default: нет context: server, location, if Директива завершает обработку текущего набора директив ngx_http_rewrite_module. Пример использования: syntax: if (условие) { ... } default: нет context: server, location Директива if проверяет истинность условия, если оно истинно, то выполняется указанный в фигурных скобках код и запрос обрабатывается в соответствии с заданной там же конфигурацией. Конфигурация внутри директивы if наследуется из предыдущего уровня. В качестве условия могут быть заданы:
Примеры использования:
Значение встроенной переменной $invalid_referer задаётся директивой valid_referers.
syntax: return код default: нет context: server, location, if Директива return завершает исполнение кода и возвращает клиенту указанный код. Можно использовать следующие значения: 204, 400, 402 406, 408, 410, 411, 413, 416 и 500 504. Кроме того, нестандартный код 444 закрывает соединение без передачи заголовка ответа. syntax: rewrite regex замена флаг default: нет context: server, location, if Директива rewrite изменяет URI в соответствии с регулярным выражением и строкой замены. Директивы выполняются в порядке их следования в конфигурационном файле. С помощью флагов можно досрочно прекратить исполнение директив. Если строка замены начинается с "http://", то клиенту будет возвращён редирект и обработка директив также завершается. Флаги могут быть следующими:
Пример использования: Если же эти директивы поместить в location /download/, то нужно заменить флаг last на break, иначе nginx сделает 10 циклов и вернёт ошибку 500: Если в строке замены указаны аргументы, то предыдущие аргументы запроса добавляются после них. Можно отказаться от этого добавления, указав в конце строки замены знак вопроса: Если в регулярном выражении встречаются символы "}" или ";", то всё выражение нужно заключить в одинарные или двойные кавычки. syntax: set переменная значение default: нет context: server, location, if Директива устанавливает значение для указанной переменной. В качестве значения можно использовать текст, переменные и их комбинации. syntax: uninitialized_variable_warn on|off default: uninitialized_variable_warn on context: http, server, location, if Директива определяет, нужно ли писать в лог предупреждение о неинициализированной переменной. Внутреннее устройствоДирективы модуля ngx_http_rewrite_module компилируется на стадии конфигурирования во внутренние коды, исполняемые во время запроса интерпретатором. Интерпретатор представляет из себя простую стековую виртуальную машину. Например, директивы
будет скомпилированы в такие коды:
Обратите внимание, что кода для директивы limit_rate нет, поскольку она не имеет отношения к модулю ngx_http_rewrite_module. Для блока if создаётся такая же конфигурация, как и для блока location. Если условие истинно, то запрос получает конфигурацию, соответствующую блоку if, и в этой конфигурации limit_rate равен 10k. Директиву
можно сделать на один код меньше, если в регулярном выражении включить
первый слэш в скобки:
тогда её коды будут выглядеть так:
(C) Игорь Сысоев |