ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Nginx, regex-домены, "root /your/app/$1/ht docs"
  • From: Dmitry Koterov <dmitry@xxxxxxxxxx>
  • Date: Fri, 6 Nov 2009 14:16:11 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=Jabk/ebPSG0VBe91y/NXE7hbTuF3qrGnK6KIYTPtrMM=; b=QKD+QZ59AO5r9brrW2VjCGVE/JdExjJP6z7l2KBRJ8WHONJnjoLRC3+9V2MqNsYQx5 7/EAHZU6fRZJL/OR9AOiCFDZ0+u6ohI8yO5bblgGuUJN6jx+fXQY7S7MDqogCHYpmRA4 wQaLpoJ7WemLftMtGuh0wo/f2jGrl6srQppAI=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type; b=LS2iiVEoZnebQQQ4L0quf5f32PrkuUXwmkLQ6EkO+gnH8e2ZzAjD/yAdAfodaazDhz Xf4NBBTjyTOs6KnH2j5U9jGHOAQplhU7s3bHo9g224gNU/AlBf5VOafi06K1mxcHL2n9 RVqV25PUZ39QZtCn0LEuuIlmo7wzJCjA/5m/E=
  • In-reply-to: <20091106103903.GS1144@xxxxxxxxxx>
  • References: <d7df81620911060208y78676188ib4468ec25a58cd1c@xxxxxxxxxxxxxx> <20091106103903.GS1144@xxxxxxxxxx>

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

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

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

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

root /your/app/$1/htdocs

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


2009/11/6 Maxim Dounin <mdounin@xxxxxxxxxx>
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




 




Copyright © Lexa Software, 1996-2009.