Nginx, regex-домены, "root /your/app/$1/htdocs"
Maxim Dounin
mdounin at mdounin.ru
Fri Nov 6 13:39:03 MSK 2009
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
More information about the nginx-ru
mailing list