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