ПРОЕКТЫ 


  АРХИВ 


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: Если в пути "root" указана переменная, не находит ind ex



Hello!

On Fri, Feb 11, 2011 at 06:10:26PM -0500, nix wrote:

> Подскажите, а из-за чего nginx 0.8.54 при
> следующей конфигурации может
> вставлять пустую переменную $branch в root
> (root находится вне location) в то время, как в
> location со статикой $branch в root передается
> как "dev"? Пробую заходить по ссылке
> http://dev.test.dev.domain.ru/
> 
> server {
>     listen 80;
>     server_name ~^(.*)\.test\.dev\.domain\.ru$ test.dev.domain.ru;
>     set $branch $1;
> 
>     charset utf-8;
>     root /srv/www/test/repo/$branch/htdocs;
>     index index.php;
> 
>     location ~*
> \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|avi|djvu|mp3|mp4|ogv)$
> {
>         root /srv/www/test/repo/$branch/htdocs;
>     }
> }

Вопрос: как работает директива index?

Ответ: модуль index проверяет существование файлов с заданными 
именами, и если находит, то делает внутренний редирект на нужный 
индексный файл.

Вопрос: как работает директива set?

Ответ: директива set выполняется в фазе rewrite (server rewrite 
для директив заданных на уровне server) и устанавливает 
заданную переменную в заданное значение.

Вопрос: что представляет собой переменная $1?

Ответ: переменная $1 содержит выделение из последнего выполненного 
регулярного выражения.

Вопрос: какое значение будет иметь переменная $branch в 
приведённом выше конфиге после внутреннего редиректа на индексный 
файл? 

Ответ: после внутреннего редиректа server rewrites будут выполнены 
повторно, и переменная $branch будет установлена в $1.  При этом 
последним регулярным выражением будет (неуспешное) тестирование "location ~* 
...", т.е. значение $1 будет неопределено.

Вопрос: как быть?

Ответ: никогда не использовать нумерованные выделения в 
server_name.  Если нужны выделения - использовать *именованные* 
выделения.

http://nginx.org/en/docs/http/server_names.html#regex_names

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.