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