ПРОЕКТЫ 


  АРХИВ 


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]

Re: ngx_http_script_module


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: ngx_http_script_module
  • From: "Дмитрий Леоненко" <dmitry.leonenko@xxxxxxxxx>
  • Date: Mon, 30 Apr 2007 12:31:14 +0300
  • Dkim-signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=NEB5dUtZd/6WGd3cqU5lPUrZMm6tLWQofXccbec2kcatvt4OtfLvzmPuFqzKOJXy9nJKm7wYnAtVl5Xo1NVfRfHAyGfZNYi1K7g/B4MYhuii5Ni17KwM/lAhP1UnXtl2ZUQq3fiJp+C08cOxJuUyepS4do0HiN/pwEMheWlmOH0=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=fC2Fegup/Hya5x2hM/bPbwVOAgvlRIgGGGRnceU4TV5i7P2RTRTM4D/bBjn0AcUCouHvd8rUNokFvLzslYEY0+fqArN5y+keAWzdNqUTWHBpk0NuW9dwkm7ij3FmRK2oUxLiE+u8ofHkn5WuiNGrbvJ75v380BXhcW60GDf/bRs=
  • In-reply-to: <20070429140151.GA10223@xxxxxxxxxxxxx>
  • References: <20070429140151.GA10223@xxxxxxxxxxxxx>

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

29.04.07, Igor Sysoev<is@xxxxxxxxxxxxx> написал(а):
Я планирую заменить 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.