Re: location / внутри location /

Maxim Dounin mdounin на mdounin.ru
Ср Янв 27 16:07:35 UTC 2021


Hello!

On Wed, Jan 27, 2021 at 06:43:10PM +0300, Slawa Olhovchenkov wrote:

> On Wed, Jan 27, 2021 at 06:34:15PM +0300, Maxim Dounin wrote:
> 
> > Hello!
> > 
> > On Wed, Jan 27, 2021 at 05:08:45PM +0300, Slawa Olhovchenkov wrote:
> > 
> > > А возможна ли конструкция типа такой:
> > > 
> > > location / {
> > >    rewrite ....;
> > >    rewrite ....;
> > >    location ~ /../(..)... {
> > >      try_files /$2/$3/$2$3$4_$1.bin @proxy;
> > >    }
> > >    location / {
> > >      try_files /notexist @proxy;
> > >    }
> > > }
> > > location @proxy {
> > > }
> > > 
> > > Ну т.е. смысл в том, что не попадает под маску -- сразу брать с
> > > апстрима, а что под маску попадает -- проверять на диске и если нет --
> > > брать с апстрима.
> > 
> > Возможна.  Впрочем, в предложенной конструкции вложенный "location /" 
> > избыточен, его содержимое можно написать непосредственно во 
> > внешнем "location /".
> 
> а кстати, есть ли какой-то более изящный способ сделать внутрений
> редирект на @proxy в данном случае?

Можно сделать 

    error_page 418 @proxy;
    return 418;

"Более изящный" ли это способ - затрудняюсь сказать, но более 
смешной.

Более правильным в данном случае будет просто прописать 
проксирование явно.

> > Заодно и написанные во внешнем "location /" директивы rewrite 
> > обретут какой-то смысл (впрочем, скорее всего по прежнему 
> > неверный, так как эти директивы не применяются к запросам, 
> > попавшим в любой из вложенных location'ов).
> 
> разве rewrite применяется не до разбора вложенных локейшинов?

Нет.  Дерево location'ов - общее, поиск подходящего location'а по 
URI - это единая операция.  Директивы rewrite применяются из 
найденного подходящего к запросу location'а.  Подробности 
применения директив rewrite расписаны в описании модуля rewrite, 
тут:

http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

> а они не наследуся ли, кстати?

Нет.

> да, я забыл в примере укзать, там рядом с rewrite у меня еще и
> auth_request есть, это тоже добавит сложностей?

Нет, auth_request это простая декларативная директива 
конфигурации, наследуемая по общим правилам, и каких-либо 
сложностей с вложенными location'ами от неё не будет.

Собственно, с rewrite тоже сложностей нет - просто работают они не 
так, как предполагает конфигурация в исходном письме.

-- 
Maxim Dounin
http://mdounin.ru/


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