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