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