Re: пожелания по документации rewrite

Ruslan Ermilov ru at nginx.com
Fri Nov 23 13:07:51 UTC 2012


On Fri, Nov 23, 2012 at 02:44:53PM +0400, Maxim Dounin wrote:
> Hello!
> 
> On Fri, Nov 23, 2012 at 01:58:18PM +0400, Anton Yuzhaninov wrote:
> 
> > Тз текущего описания rewrite не очевидно, что после обычного rewrite
> > будет использовкаться конфигурация из нового location, а при rewrite
> > ... break остается конфигурация текущего location.
> > 
> > Например с таким конфигом:
> > 
> > location = /test1.txt {
> >     add_header X-Location test1;
> >     deny all;
> > }
> > 
> > location = /test2.txt {
> >     add_header X-Location test2;
> >     rewrite ^ /test1.txt break;
> > }
> > 
> > location = /test3.txt {
> >     add_header X-Location test3;
> >     rewrite ^ /test2.txt;
> > }
> > 
> > При запросе на /test3.txt будет отдан файл test1.txt, с заголовком test2.
> > 
> > Було бы неплохо упомянуть в документации такую особенность rewrite break.
> 
> Всмысле - прописать явно, что break "завершает обработку ..." без 
> поиска нового location'а?  Так-то там даже пример про это есть.  
> Но вообще да, наверное имеет смысл.

Так плохо, т.к. rewrite ... break или break (ещё одно место),
указанные на уровне server, не отключат поиск нового location'а.
Моё предложение такое.

Было:

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

- выполняются директивы этого модуля, описанные на уровне сервера;

- ищется location для запроса;

- выполняются директивы этого модуля, описанные в выбранном location, и если
  они изменяли URI, то ищется новый location для уже нового URI. Этот цикл
  может повторяться до 10 раз, после чего возвращается ошибка 500 (Internal
  Server Error).

Стало:

[...]

- выполняются директивы этого модуля, описанные в выбранном location, и если
  они изменяли URI и не было break, то ищется новый location для уже нового URI.
  Этот цикл может повторяться до 10 раз, после чего возвращается ошибка 500
  (Internal Server Error).



Подробная информация о списке рассылки nginx-ru