让 Nginx 中的致命错误显示在浏览器中

让 Nginx 中的致命错误显示在浏览器中

在开发过程中,每当我在 PHP 中因拼写错误或编程不当而产生致命错误时,我的浏览器中就会出现空白页 ;)。我必须查看原始 nginx 错误日志文件才能查看致命错误并找到它们所在的行号,这对我来说非常烦人。我似乎找不到如何让 nginx 在浏览器中显示 PHP 致命错误。这是我的 nginx 配置的相关部分:

location @fpm {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_NAME index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param PATH_INFO $path_info;
}

这是一个示例错误,它显示在我的错误日志中,然后导致浏览器页面空白:

2014/01/04 14:53:52 [error] 20082#0: *403 FastCGI sent in stderr:
"PHP message: PHP Fatal error:  Cannot redeclare class ClassName in FilePath on line 356"
while reading response header from upstream, client: 192.168.1.10,
server: servername, request: "GET URLPATH HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "host",
referrer: "referer"

这是我的 PHP 信息:

在此处输入图片描述

这是我的 PHP-FPM 配置:

http://pastebin.com/QkCTbBYj

我的 PHP-FPM 池配置如下:

http://pastebin.com/TZfZ8d7G

我的 PHP-FPM php.ini:

http://pastebin.com/RsXRxduf

如果有人能告诉我该怎么做才能让这些错误显示出来,我将非常高兴!

答案1

在您的 PHP-FPM 池配置中取消注释

第 463 行php_flag[display_errors] = off

并将其更改为

php_flag[display_errors] = on

不要忘记重启 php-fpm

答案2

我认为我们的设置 display_errors 不足以显示 nginx 的错误。

对我来说解决这个问题的最后一个技巧是关闭 fastcgi_intercept_errors:

fastcgi_intercept_errors off;

通常此功能默认处于启用状态,例如在 fastcgi_params 中。

相关内容