mod_geo для nginx

Igor Sysoev is at rambler-co.ru
Tue Feb 1 11:51:19 MSK 2005


On Mon, 31 Jan 2005, Andrew Kopeyko wrote:

> On Sun, 30 Jan 2005, Igor Sysoev wrote:
>
>> Да, планирую, более того, он уже частично сделан.
>> Формат такой же, синтаксис несколько отличается. Директива такая:
>> 
>>    geo geo0 3 {
>>        include         iplist;
>>        127.0.0.0/30    7;
>>    }
> [ ... ]
>>   if ($geo0) {
>>       rewrite  -   /internal/forbidden.html  last;
>>   }
>
> А в какие сроки можно ожидать такой функциональности:
>
> server {
>  listen 80;
>  geo good_networks 1 {
>      include         /path/to/netlist;
>      127.0.0.0/30    7;
>  }
>  if ( not $good_networks ) {
>      limit_rate      100k;
>  }
>  location / {
>      root            /path/to/docroot;
>  }
> }
>
> То есть для сетей, не входящих в некий список, мы ограничиваем скорость 
> отдачи контента - чтоб много не накачали.

Именно этот конфиг на данный момент сложно реализовать эффективно.
Можно будет сделать такой:

    geo good_networks {
       default      0;
       include      /path/to/netlist;
       127.0.0.0/30 7;
    }

    server {
        location / {
            root   /path/to/docroot;

            if (not $good_networks) {
                limit_rate    100k;
            }
        }
    }

То есть, на уровне сервера можно будет делать if (...) { rewrite ... },
а вот задавать помимо rewrite обычные директивы внутри if() можно будет
только на уровне location.

И ещё, geo задаётся только на уровне http.
Кстати, значение geo по умолчанию я решил задавать в списке адерсов:
    default    0;
внутри оно выглядит как
    0.0.0.0/0  0;


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





More information about the nginx-ru mailing list