ngx_http_script_module

Дмитрий Леоненко dmitry.leonenko at gmail.com
Mon Apr 30 13:31:14 MSD 2007


Супер. ИМХО правильный шаг.

29.04.07, Igor Sysoev<is at rambler-co.ru> написал(а):
> Я планирую заменить ngx_http_rewrite_module на ngx_http_script_module.
> Одновременно они работать, скорее всего, не будут, но какое-то время
> ngx_http_rewrite_module всё ещё будет в дистрибутиве для плавной
> миграции.
>
> Сейчас блок if - это своеобразный блок location, внутри которого есть
> статическая конфигурация. Из-за этого нельзя сделать следующие вещи:
>
> 1) if на уровне сервера:
>
>     server {
>
>         if (condition) {
>             limit_rate  1k;
>         }
>
> потому что статическая конфигурация (частью которой является limit_rate)
> будет потеряна при попадании в любой location и никакого limit_rate не будет.
> Поэтому используется переменная:
>
>     server {
>
>         if (condition) {
>             set  $limit_rate  1k;
>         }
>
> 2) несколько последовательных истинных if'ов - проверка if'ов завершается
> на первом истинном условии. В данной конфигурации
>
>     location / {
>
>         if (true) {
>             A
>         }
>
>         if (true) {
>             B
>         }
>
> управление в B никогда не попадёт (вернее, попадёт, если воспользоваться
> одним хаком).
>
>
> Что планируется:
>
> 1) синтаксический сахар: вместо
>       set   $var  value;
>    будет
>       $var = value;
>
> 2) поддержка &,|,! в if.
>
> 3) else
>
> 4) не будет rewrite: вместо
>       rewrite  ^/uri(/.*)  $1   last;
>    будет
>       if ($uri ~ ^/uri(/.*)) {
>           $uri = $1;
>           continue;
>       }
>
> 5) внутри блоков if не будет директив статической конфигурации, а можно
> будет использовать только присваивания, несколько директив модуля script
> и нескольких специальных директив (например, proxy_pass):
>
>     break - прерывает исполнения директив модуля script;
>     continue - прерывает исполнения директив модуля script и ищет новый
>                location для изменённого $uri;
>     redirect - возвращает редирект пользователю.
>
>     Вместо
>
>     location / {
>
>         if (condition) {
>             rewrite  ...  break;
>             proxy_pass  http://AAA;
>         }
>
>         proxy_pass  http://BBB;
>
>     будет что-то вроде
>
>     location / {
>
>         if (condition) {
>             $proxy_uri = ...;
>             proxy_pass  http://AAA;
>         }
>
>         proxy_pass  http://BBB;
>
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
>


More information about the nginx-ru mailing list