nginx-0.1.17

Igor Sysoev is at rambler-co.ru
Thu Feb 3 18:51:36 MSK 2005


Изменения в nginx 0.1.17                                          03.02.2005

     *) Добавление: модуль ngx_http_rewrite_module полностью переписан.
        Теперь можно делать редиректы, возвращать коды ошибок и проверять
        переменные и рефереры. Эти директивы можно использовать внутри
        location. Директива redirect упразднена.

     *) Добавление: модуль ngx_http_geo_module.

     *) Добавление: директивы proxy_set_x_var и fastcgi_set_var.

     *) Исправление: конфигурация location с модификатором "=" могла
        использоваться в другом location.

     *) Исправление: правильный тип ответа выставлялся только для запросов,
        у которых в расширении были только маленькие буквы.

     *) Исправление: если для location установлен proxy_pass или
        fastcgi_pass, и доступ к нему запрещался, а ошибка перенаправлялась
        на статическую страницу, то происходил segmentation fault.

     *) Исправление: если в проксированном ответе в заголовке "Location"
        передавался относительный URL, то к нему добавлялось имя хоста и
        слэш; ошибка появилась в 0.1.14.

     *) Исправление: на Linux в лог не записывался текст системной ошибки.


Комментарий.

                        geo

Описывается на уровне http. Может быть несколько переменных.

geo  name  {
      default          0;
      include          list0;
      include          list1;
      192.168.0.0/16   50;
}

Можно указывать числа или строки, например,
      192.168.0.0/16   RU;

Переменную можно передавать в "proxy_set_x_var  name" и
"fastcgi_set_var  name". Ещё можно проверять так: if ($name) { ... }
Внутри if можно задавть не только директивы rewrite, но и обычные,
сейчас можно только две:

if ($slow) {
     limit_rate   10k;
}

или

if ($no_gzip) {
     gzip  off;
}

Остальные директивы пока не работают, но добавить их достаточно быстрая,
но муторная процедура.


                        rewrite

Формат: "rewrite   regex   subst   modifier"

Если subst начинается с http://, то это редирект.
modifier могут быть следующими: last, redirect и permanent.
redirect нужен для задания subst без http://.

Можно задавать рефереры:

valid_referers  none  server_names  *.example.com/;

и затем проверять их:

if ($invalid_referer) {
     rewrite   ^/   http://www.example.com;
     или
     return   403;
}


Как кодируются всякие странные символы в rewrite, зависит от того,
будет выполнятся редирект или нет. Запрос

/test/one%20+%25%3Ftwo/three%20+%25%3Ffour?five=six%20+%25%3Fseven

будет переписан директивой
    rewrite ^/test/(.+)/(.+)$ /$1?uname=$2  last;

в "/one +%?two", и аргументы у него будут такие:

uname=three%20%2b%25%3ffour&five=six%20+%25%3Fseven

Директива rewrite ^/test/(.+)/(.+)$ /$1?uname=$2  redirect;
этот же запрос перепишет в

/one%20%2b%25%3ftwo?uname=three%20%2b%25%3ffour&five=six%20+%25%3Fseven


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list