Re: Подпапки, alias и try_files
Maxim Dounin
mdounin на mdounin.ru
Ср Янв 20 15:57:08 UTC 2016
Hello!
On Tue, Jan 19, 2016 at 05:46:39PM +0300, Mamontov Roman wrote:
> Добрый день.
>
> Пытаюсь настроить nginx + php-fpm для подпапки:
>
> Такая конфигурация работает при cgi.fix_pathinfo=1:
>
> location /owa {
> alias /usr/local/www/vexim/;
> try_files $uri $uri/ /index.php;
>
> location ~ ^/owa(.+\.php)$ {
> alias /usr/local/www/vexim$1;
> fastcgi_pass php-fpm;
> include fastcgi_params;
> fastcgi_index index.php;
> fastcgi_param SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
> }
> }
>
> Если поставить cgi.fix_pathinfo=0, то будет ошибка "No input file specified.
> [error] 30721#0: *2 FastCGI sent in stderr: "Unable to open primary
> script: /usr/local/www/vexim/index.php/owa/index.php (No such file or
> directory)"
Потому что SCRIPT_FILENAME у вас установлен в
$document_root$fastcgi_script_name, где
- $document_root = /usr/local/www/vexim/index.php, т.к.
используется директива alias с полным заданием пути,
- $fastcgi_script_name = /owa/index.php, т.к. это переменная
задаёт имя скрипта в пространстве адресов, а не файлов, и
соответственно не знает про alias.
Чтобы работало, нужно задать в SCRIPT_FILENAME значение, которое
бы показывало на правильное имя файла, e.g.:
fastcgi_param SCRIPT_FILENAME $request_filename;
Отдельно отмечу, что задавать alias во внутреннем location'е в
nginx 1.9.4+ не надо, он корректно отнаследуется из внешнего
location'а.
> Если при cgi.fix_pathinfo=1 указать директиву try_files $uri =404, то
> получаем ошибку 404.
>
> Хочется понять, как правильно настроить nginx одновременно с alias и
> try_files $uri =404 в location?
При использовании try_files совместно с alias, задающим полное имя
файла, nginx сейчас пытается трактовать параметры try_files как
дополнения к имени, e.g.
try_files ".html" =404;
Т.е. если хочется совместить alias с полным путём и try_files,
проверяющий существование непосредственно запрашиваемого файла, то
сейчас надо писать так:
alias /path/to/$1;
try_files "" =404;
Впрочем, лучше alias из внутреннего location'а убрать, как
предложено выше, тогда "try_files $uri =404" будет работать
штатно.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru