Re: Nginx, regex-домены, "root /your/app/$1/htdocs"

Dmitry Koterov dmitry at koterov.ru
Fri Nov 6 14:16:11 MSK 2009


Т.е. $1 заменяется на значение не в тот момент, когда он встречается в
переменной, а в самый последний, когда переменная вставляется в ту или иную
директиву?

Я ожидал, что в конструкции

set $docroot /your/app/$1/htdocs;

в $docroot попадет уже ОКОНЧАТЕЛЬНАЯ строка, в которой нет упоминаний $1 и
т.д... Аналогично, что в

root /your/app/$1/htdocs

директиве root будет скормлена уже интерполированная строка, без информации
о $1.


2009/11/6 Maxim Dounin <mdounin at mdounin.ru>

> Hello!
>
> On Fri, Nov 06, 2009 at 01:08:21PM +0300, Dmitry Koterov wrote:
>
> > Похоже на баг.
> > nginx/0.7.62
> >
> > Я обнаружил, что связка вот таких директив не работает (fastcgi_php не
> > срабатывает):
> >
> > server_name ~^([a-z0-9]+)\.example\.com$
> > root /your/app/$1/htdocs
> > fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
> >
> > А вот такие, по смыслу, казалось бы, идентичные, - работают:
> >
> > server_name ~^([a-z0-9]+)\.example\.com$
> > set $docroot /your/app/$1/htdocs;
> > root $docroot;
> > fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
> >
> > Видимо, если в root содержатся regexp-маркеры (типа $1), они неправильно
> > обрабатываются в $document_root, в итоге fastcgi_param не срабатывает.
>
> $1 - это capture от последнего выполнившегося регекспа.  Если по
> дороге от матчинга server_name до fastcgi_pass случится хотя бы
> один regexp (e.g. regexp location, причём не обязательно
> совпавший) - первая конфигруация ожидаемо сломается.
>
> А вторая конфигурация сломается если случится регексп и внутренний
> редирект с повторным поиском совпавшего location'а (e.g. regexp
> location + rewrite ... last).
>
> Maxim Dounin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20091106/ef130a5c/attachment.html>


More information about the nginx-ru mailing list