ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ngx_http_script_module



Я планирую заменить 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



 




Copyright © Lexa Software, 1996-2009.