Nginx 给我一个 500 错误,这让我发疯。首先,我有一个personalsite.conf
存档,/etc/nginx/conf.d/
里面有我的服务器块。
这是我的服务器块配置:
server {
listen 80;
server_name personalsite.me;
charset UTF-8;
access_log /var/log/nginx/personalsite.access.log main;
error_log /var/log/nginx/personalsite.error.log;
root /usr/share/nginx/html/personalsite;
index index.php index.html index.htm;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
另外,nginx 用户已分配了适当的权限/usr/share/nginx/html/personalsite/
。
问题是,当我尝试浏览时personalsite.me
,Nginx 给了我一个 500 错误,有趣的是我知道这一点,因为我检查personalsite.access.log
并看到了它,因为浏览器只是一片空白。由于未知原因,Nginx 无法向我显示其 500 错误页面,如您所见,该页面已在服务器块中正确声明。
另一个奇怪的事情是,它personalsite.error.log
是空白的,什么也没有记录。
我还在我的档案中声明了该域名及其 IP /etc/hosts
。所以我真的不知道这里发生了什么。
一切都在 Digital Ocean VPS 上运行 CentOS 7。
答案1
大多数错误是由于 Nigix 设置时的错误配置造成的。我建议检查文件( /etc/php-fpm.d/www.conf
)。
vi /etc/php-fpm.d/www.conf
找到指定listen参数的行,并将其更改为如下所示:
listen = /var/run/php-fpm/php-fpm.sock
listen.owner
接下来,找到设置和的行listen.group
并取消注释它们。它们应该看起来像这样:
listen.owner = nobody
listen.group = nobody
最后,找到设置用户和组的行并将其值从“apache”更改为“nginx”:
user = nginx
group = nginx
然后保存并退出
/etc/init.d php-fpm restart
答案2
这不是世界上最好的答案,但 500 错误是模棱两可的,它可能是你的 nginx 配置,也可能与你的网站内容有关。最小化您的配置并重建,直到您可以重现问题。
将网站内容替换为简单的 index.html,其中仅包含一些纯文本。省略所有额外的错误指令和位置块。一旦建立了基本功能,您就可以不再那么疯狂,并添加其他指令,边做边测试,直到您隔离出导致问题的任何指令并从中找到根本原因。
答案3
当 PHP display_errors 被禁用时,PHP 错误可能会返回 Nginx 500 错误。
您应该查看 php-fpm 日志,我相信您会在那里找到错误。对于 CentOS 7:
tail -f /var/log/php-fpm/www-error.log
您还可以显示 PHP 错误。在 /etc/php.ini 中,更改:
display_errors = Off
到 :
display_errors = On
答案4
使用 php-fpm 您还需要编辑 /path/php/version/fpm//pool.d/ 中的 www.conf
catch_workers_output = yes
如果没有这个修改,php-fpm 永远不会写入你的日志