如何修复 Nginx 给我的未知内部服务器错误 (500)?

如何修复 Nginx 给我的未知内部服务器错误 (500)?

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 永远不会写入你的日志

相关内容