Re: fastcgi и несколько document root

Maxim Dounin mdounin на mdounin.ru
Чт Июн 9 12:22:51 UTC 2016


Hello!

On Thu, Jun 09, 2016 at 02:22:21PM +0300, Alex Domoradov wrote:

> Понял, еще один момент. А если мне надо получить такое поведение
> 
> http://example.com/api/test.php -> /vhosts/
> example.com/public_html/api/web/test.php
> 
> как будет более правильно реализовать такое поведение? Сейчас реализовал
> через set, но что то подсказывает, что это велосипед
> 
> location ~/api/(.*\.php$) {
>    set $file_path "$1";
>    error_page 406 = @fastcgi-api;
>    return 406;
> }
> 
> location @fastcgi-api {
>    root /vhosts/example.com/public_html;
>    fastcgi_param SCRIPT_FILENAME $document_root/api/web/$file_path;
> }

Проще всего сделать как-то так:

    location ~ /api/(.*\.php)$ {
        alias /vhosts/example.com/public_html/api/web/$1;
        fastcgi_pass ...
        include fastcgi.conf;
    }

(Где fastcgi.conf - стандартный конфиг из дистрибутива, 
устанавливающий SCRIPT_FILENAME в $document_root$fastcgi_script_name.)

Или, если на самом деле любые запросы к /api/ должны смотреть в 
public_html/api/web/, как-то так:

    location /api/ {
        alias /vhosts/example.com/public_html/api/web/;

        location ~ \.php$ {
            fastcgi_pass ...
            include fastcgi.conf;
        }
    }

Отмечу также, что смысла в error_page/return/именованых 
location'ах в конфиге как он показан - нет.  Если смысл на самом 
деле есть - то можно и через set передать нужное.

Отдельный вопрос: зачем все эти танцы, и не проще ли на 
файловой системе всё хранить в приличном виде, или как минимум 
сделать правильную структуру симлинками.

-- 
Maxim Dounin
http://nginx.org/



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