Я настроил доступ к локальному каталогу через поддержку nginx alias + php: https://mydomain.de/wbg
указывает на /var/www/wallabag
. Все работало нормально, пока я не выполнил обычное обновление apt-get update && apt-get upgrade на сервере (работающем на debian 8). Теперь, когда я открываю сайт, я получаю только «Входной файл не указан». Вот что говорит nginx:
2016/02/20 13:07:14 [error] 4376#0: *1 FastCGI sent in stderr: "Unable to open primary script: /var/www/wallabag/index.php/wbg/index.php (No such file or directory)" while reading response header from upstream, client: 78.50.228.24, server: mydomain.de, request: "GET /wbg/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "mydomain.de"
Это важная часть моей конфигурации:
server {
server_name mydomain.de;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# ssl configuration
# ...
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
# ...
}
location /wbg/ {
alias /var/www/wallabag/;
index index.php;
location ~ ^.+?\.php(/.*)?$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename$fastcgi_script_name;
}
}
}
Как это возможно, что эта конфигурация сломается после обновления? И как это исправить?
(версия nginx - 1.6.2-5 + deb8u1 после обновления, php5-fpm: 5.6.17 + dfsg-0 + deb8u1)
Простой ответ заключается в том, что сообщение об ошибке соответствует вашей конфигурации в том виде, в котором она есть сейчас, поэтому я понятия не имею, как это работало до обновления.
В fastcgi_param SCRIPT_FILENAME $request_filename$fastcgi_script_name
линия генерирует значение /var/www/wallabag/index.php/wbg/index.php
так как:
$request_filename = /var/www/wallabag/index.php
$fastcgi_script_name = /wbg/index.php
Если вы не используете информацию о пути (это URI, следующий за .php
) вы можете упростить PHP-часть конфигурации и просто использовать $request_filename
. Что-то вроде:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
Однако для создания SCRIPT_FILENAME из URI с информацией о пути вы можете использовать:
location ~ \.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^/wbg(.+\.php)(/.*)?$;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Заметь fastcgi_split_path_info
удаляет /wbg
префикс из URI, чтобы построить правильное значение для SCRIPT_FILENAME.