Re: root, alias и named location

Maxim Dounin mdounin на mdounin.ru
Пт Фев 18 17:26:35 MSK 2011


Hello!

On Fri, Feb 18, 2011 at 11:45:30AM +0000, Max Ivanov wrote:

> Добрый день!
> Прошу помощи, т.к. оказался в ступоре по элементарному вопросу :)
> 
> Хочется при запросе /zzz/abc.php открывать файл /data/sites/misc/abc.php
> Хочется задавать обработку /zzz/ в подключаемом файле, чтоб его можно
> было использовать на многих сайтах, для этого хочется использовать
> именованный location.
> 
> Сейчас делаю так:
> 
> 
> location @misc_backend {
>           root /data/sites/misc/;
>           include /etc/nginx/settings/fastcgi.conf;
>           fastcgi_pass php_auth;
> }
> 
> location /zzz/ {
>         alias /data/sites/misc/;
> 
>         location ~ \.php$ {
>                 error_page  418 = @misc_backend;
>                 return 418;
>         }
> }
> 
> 
> Но все равно $uri  в @misc_backend остается /zzz/abc.php (а значит
> обрабатываться пытается /data/sites/misc/ , хотя вроде как директива
> alias должна была убрать /zzz/ из $uri как я понял из ее описания.

Всё, что написано в location /zzz/, действует ровно до того 
момента, как вы из этого location ушли, передав обработку в 
location @misc_backend.  Дальше начинает действовать то, что 
написано в location @misc_backend: а именно "root 
/data/sites/misc/" и никаких alias'ов.

Кроме того, со стандартным fastcgi.conf alias для location'ов, 
заданных регулярным выражением, будет жить будет плохо, негодно.  
Как-то так должно работать:

    location /zzz/ {
        alias /data/sites/misc/;

        location ~ \.php$ {
            fastcgi_pass   php_auth;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            include fastcgi_params;
        }
    }

Maxim Dounin



Подробная информация о списке рассылки nginx-ru