我遇到了一个非常常见但令人讨厌的错误,经典的错误:“文件未找到”。我有以下 nginx.conf:
server {
listen 80;
server_name aperophp;
root /home/gline/mysite/web;
location = / {
try_files @site @site;
}
location / {
try_files $uri $uri/ @site;
}
location ~ \.php$ {
return 404;
}
location @site {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
但是我有这个文件:
$ ls -ld /home/gline/mysite/web/index.php
-rw------- 1 gline gline 66 Jan 5 13:25 /home/gline/mysite/web/index.php
如果你有什么想法的话。
对于您的帮助,我提前表示感谢。
答案1
你应该检查 php-fpm 是否可以读取这个 php 文件,检查你是否
user = gline
group = gline
在有关池的 php-fpm conf 文件中。
答案2
PHP 进程无法读取您的文件。
您可以看到,脚本的权限仅允许用户gline
读取(或写入)该文件,但 PHP 默认以不同的用户 ID 运行(例如nobody
或www-data
)。
要解决此问题,请使文件可供所有人读取。您可能还需要使包含的目录及其父目录可搜索。
chmod a+r /home/gline/mysite/web/index.php
chmod a+x /home/gline/mysite/web
chmod a+x /home/gline/mysite
chmod a+x /home/gline
答案3
这次会议上发生了很多奇怪的事情。
它返回 404,因为你告诉它这样做。任何以 .php 结尾的内容都将匹配该location ~ \.php$
块。
另外,为什么有两个/
位置块?
很难从 conf 文件中判断您想要实现什么,但这是一个非常标准的 nginx/php conf:
server {
listen 80;
server_name aperophp;
root /home/gline/mysite/web;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}