ПРОЕКТЫ 


  АРХИВ 


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: nginx-ru Digest, Vol 47, Issue 4


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: nginx-ru Digest, Vol 47, Issue 4
  • From: Maxim Dounin <mdounin@xxxxxxxxxx>
  • Date: Mon, 2 Sep 2013 14:29:59 +0400
  • In-reply-to: <CAK1EO=UASpmRMd9U5Ze7M1uQPPN3MYi_C599c6i1bQ5XAPZZSw@mail.gmail.com>
  • References: <mailman.2359.1378084565.22071.nginx-ru@nginx.org> <CAK1EO=UASpmRMd9U5Ze7M1uQPPN3MYi_C599c6i1bQ5XAPZZSw@mail.gmail.com>

Hello!

On Mon, Sep 02, 2013 at 11:38:22AM +0300, Андрей Середенко wrote:

> В таком случае, если отрабатывает только последний из if'ов - то в данной
> конфигурации:
> 
>  location ~* /test/url/Page.asmx {

[...]

>             set $my_ipsrc 0;
>             # allow 10.10.1.75/32;
>             if ($remote_addr = 10.10.1.75) { set $my_ipsrc 1; }
>             # allow 10.20.1.20/32;
>             if ($remote_addr = 10.20.1.20) { set $my_ipsrc 1; }
>             # allow 10.20.1.21/32;
>             if ($remote_addr = 10.20.1.21) { set $my_ipsrc 1; }
>             # allow 10.100.1.0/24;
>             if ($remote_addr = 10.100.1.0/24) { set $my_ipsrc 1; }

JFYI: эта проверка никогда не срабатывает, т.к. операция "=" - это 
сравнение со строкой, а адрес не может выглядеть как 
"10.100.1.0/24".

>             # allow 178.111.122.133/32;
>             if ($remote_addr = 178.111.122.133) { set $my_ipsrc 1; }
>             # deny all;
>             if ($my_ipsrc = 0) { return 500; }
>        }
> 
> всем, кроме последнего адреса, должно возвращаться "500" ?
> или лыжи не едут? :)

Вы неправильно прочитали то, что было написано.  Запрос будет 
обрабатываться в контексте неявного location'а, относящегося к 
последнему сработавшему if'у.  E.g., для ip 10.10.1.75 запрос 
будет обротан в контексте

    if ($remote_addr = 10.10.1.75) { set $my_ipsrc 1; }

со всеми вытекающими из этого последствиями вроде отсутствия 
try_files.

Но вообще конфигурация, скажем так, далека от разумного.  
Правильно - использовать allow/deny (+ error_page, если нужно 
вместо 403 выдать 500) или geo{}.

Ссылки по теме:

http://nginx.org/ru/docs/http/ngx_http_access_module.html
http://nginx.org/ru/docs/http/ngx_http_geo_module.html

-- 
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.