ПРОЕКТЫ 


  АРХИВ 


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: allow/deny and return



On Wed, Oct 16, 2013 at 01:12:29PM +0400, Anton Yuzhaninov wrote:
> On 10/15/13 16:45, Maxim Dounin wrote:
> > On Tue, Oct 15, 2013 at 04:26:32PM +0400, Anton Yuzhaninov wrote:
> >
> >> В такой конфигурации:
> >>
> >> location /closed {
> >>    allow 10.1.1.1;
> >>    deny all;
> >>    return 200 "secret\n";
> >> }
> 
> > Я, например, хорошего способа не знаю.  Потому что не с первого
> > взгляда - момент в общем-то очевидный (у прочитавших документацию
> > на модуль rewrite вопросов, как мне кажется, возникнуть не
> > должно), а как это корректно рассказать не читавшим...
> 
> В документации на rewrite: 
> http://nginx.org/en/docs/http/ngx_http_rewrite_module.html не нашел явное 
> указание на то, что директивы этого модуля выполняются до модулей access-фазы 
> (ngx_http_access_module,ngx_http_auth_basic_module, 
> ngx_http_auth_request_module).
> 
> Если знать внутреннюю архитектуру nginx то это очевидно, но прочитав только 
> документацию на ngx_http_rewrite_module и ngx_http_access_module догадаться 
> будет сложно.

То, что в описанном тобой случае директива access "не выполняется",
можно понять, прочитав раздел "Внутреннее устройство", нюанс про
директиву limit_rate.

> Думаю можно просто добавить в начало описания ngx_http_rewrite_module 
> маленький 
> абзац про это.

Написать, что директивы модуля rewrite выполняются до директив модуля
access - это плохая идея, т.к. это не отразит сути и только запутает.

Надо донести мысль о том, что rewrite (включая ВСЕ его директивы) -
это процесс поиска location'а.  При обработке запроса сначала выполняется
поиск location'а по URI, затем выполняются директивы модуля rewrite (и
только они!) для данного location'а (*), в рез-те location может измениться,
процесс повторяется.  Также в процессе поиска location'а выполнение
запроса может и вовсе завершиться (return, rewrite redirect).
И лишь потом, когда найден конечный location, "выполняются" остальные
директивы, включая access-модули.

(*) Я специально выше опустил пункт про директивы rewrite на уровне
server, дабы не загромождать.

Возможно достаточно будет переформулировать это так:

< Директивы модуля ngx_http_rewrite_module обрабатываются в следующем порядке: 

> Обработка запроса начинается с выполнения директив модуля 
> ngx_http_rewrite_module.
> Директивы обрабатываются в следующем порядке:

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


 




Copyright © Lexa Software, 1996-2009.