![PHP-FPM:来自 nginx/error.log 的“没有此类文件或目录”错误。路径或权限问题?](https://linux22.com/image/146731/PHP-FPM%EF%BC%9A%E6%9D%A5%E8%87%AA%20nginx%2Ferror.log%20%E7%9A%84%E2%80%9C%E6%B2%A1%E6%9C%89%E6%AD%A4%E7%B1%BB%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%E2%80%9D%E9%94%99%E8%AF%AF%E3%80%82%E8%B7%AF%E5%BE%84%E6%88%96%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%9F%20.png)
当我在浏览器栏中输入我的 wiki 地址时,收到“FastCGI 在 stderr 中发送:“无法打开主脚本:/var/www/mediawiki/index.php(没有此类文件或目录)””错误。这是我的 PHP-FPM www.conf 文件:
[www]
user = nginx
group = nginx
listen = /var/run/php/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
;chroot =
;chdir =
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
php_value[opcache.file_cache] = /var/lib/php/opcache
这是我的 nginx conf.d 文件:
# HTTP requests will be redirected to HTTPS
server {
listen 80;
listen [::]:80;
server_name wiki.example.com;
return 301 https://$host$request_uri;
}
# HTTPS Configuration
server {
listen 443 ssl;
listen [::]:443;
server_name wiki.example.com;
root /var/www/mediawiki;
index index.php;
autoindex off;
# SSL Certification Configuration
ssl_certificate
/etc/letsencrypt/live/wiki.example.com/fullchain.pem;
ssl_certificate_key
/etc/letsencrypt/live/wiki.example.com/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?title=$1&$args;
}
location ^~ /maintenance/ {
return 403;
}
#PHP-FPM Configuration NGINX
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires max;
log_not_found off;
}
location = /_.gif {
expires max;
empty_gif;
}
location ^~
^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
deny all;
}
location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-
config|resources|serialized|tests)/ {
internal;
}
# Security for 'image' directory
location ~* images/.*.(html|htm|shtml|php)$ {
allow all;
types {}
default_type text/plain;
}
# Security for 'image' directory
location ^~ /images/ {
allow all;
try_files $uri /index.php;
}
}
我觉得这是一个权限问题,或者 php-fpm 守护进程正在查找冗余文件路径或其他内容。我尝试通过 nginx conf.d 文件将绝对路径传递给 FPM,方法是:
fastcgi_param SCRIPT_FILENAME /var/www/mediawiki/index.php;
无济于事。所以我知道我将它指向正确的方向,但它仍然给我同样的错误,这让我相信我有权限问题。我也尝试过:
setenforce 0
但这也行不通。我已经 chmod 777 整个目录,包括 index.php 文件。
一些背景:
我想安装一个 wikimedia 扩展,它需要新版本的 php (7.0+),而我运行的是 5.4,因为它随 CentOS 7 的基本安装一起提供。我不熟悉如何更新 PHP,所以我不小心 yum 删除了 php *,从 remi 安装了 php73,删除了它,重新安装了 php 5.4,最后发现我可以通过启用 remi-php71.repo 进行 yum update 来更新我的基础包。但是,我在此过程中丢失了 .conf 和 php.ini 文件。
编辑:
/var/log/nginx/error.log 当我在浏览器中访问我的网站时:
2019/01/22 16:58:19 [error] 10876#0: *1 FastCGI sent in stderr: "Unable to
open primary script: /var/www/mediawiki/index.php (No such file or
directory)" while reading response header from upstream, client:
10.11.190.1, server: wiki.example.com, request: "GET / HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php/php-fpm/php-fpm.sock:", host:
"wiki.example.com"
/var/log/php-fpm/www-access.log:
- 22/Jan/2019:16:58:19 -0700 "GET /index.php" 404
/var/www/mediawiki/index.php /var/www/mediawiki /index.php /index.php
答案1
cgi.fix_pathinfo=0
我修好了它,感谢克里斯托弗通过他的询问为我指明了正确的方向php.ini。
他的具体问题没有解决问题,但我继续尝试附近的cgi.fix_pathinfo=0
设置php.ini并且能够从 PHP-FPM 收到一条不同的错误消息,没有错误,抱怨无法打开/var/www/mediawiki/index.php
.
这个问题花了我整整 5 天的时间才解决。我真的很感谢克里斯托弗的帮助!
我最终评论了以下几行php.ini:
;cgi.fixpathinfo=0
;user_dir=/var/www/mediawiki **This is the one that changed the error message
一旦我改变了它,我得到了一个InvalidArgumentException
这是由于php-mysqlnd
我从 5.4 > 7.1 升级时没有安装。
一旦我安装了它,bam,wiki 就恢复并运行了。
我想绕着大楼跑五圈。再次感谢克里斯托弗为我指明了正确的方向!
约旦