Welcome! Log In Create A New Profile

Advanced

Re: Подпапки, alias и try_files

Maxim Dounin
January 20, 2016 11:38AM
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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Re: Подпапки, alias и try_files

Maxim Dounin January 20, 2016 11:38AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 287
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready