Вопрос по ngx_http_geo_module и регистру сравнения

Igor Sysoev is at rambler-co.ru
Fri Aug 31 12:58:20 MSD 2007


On Fri, Aug 31, 2007 at 11:13:34AM +0400, Vadim A. Umanski wrote:

> >> Вопрос.
> >> 1. Сравнение в if будет case-sensitive ?
> AV> да
> >> 2. Если да, то отчего пример конфига маленькими буквами?
> AV> потому что ниже по 
> AV> http://sysoev.ru/nginx/docs/http/ngx_http_geo_module.html#example есть
> AV> В файле conf/geo.conf могут такие строки:
> AV> 10.2.0.0/16      ru;
> AV> 192.168.2.0/24   ru;
> >> 3. Не стоит ли упомянуть в документации, что на регистр символов надо
> >>    обращать внимание?
> AV> Насколько я вижу на 
> AV> http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#if упомянуто
> AV> проверка переменной с помощью регулярного выражения без учёта регистра символов
> AV> ? "~*" и с учётом ? "~"
> 
> if ($country !~* "ru") {
>                         return   403;
> }
> 
> Да, такая конструкция благополучно срабатывает. Очень корректно
> получается, можно писать родную страну как в голову взбредет и не
> беспокоиться. ;-)

Только нужно учитывать, что регулярные выражение медленее, чем простое
сранение строк. В данном же случае для проверки страны лучше использовать
такое:

     default          1;
     192.168.1.0/24   0;  # ru
     10.2.0.0/16      0;  # ru


     if ($abroad) {
         return 403;
     }

И проверка будет быстрее (быстрее сравнения строки).
И, что более важно, памяти под geo уйдёт меньше - нужно хранить только
российские сети.


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





More information about the nginx-ru mailing list