Nginx Php-fpm 没有在任何地方记录 500 错误


Nginx Php-fpm not logging 500 error anywhere

nginx或php-fpm也不会报告错误500输出,实际上500响应在访问日志上,而不是nginx错误日志上。脚本在我的开发环境中运行正常。

nginx version: nginx/1.6.2  
PHP 5.5.19 (fpm-fcgi)

试过这个

catch_workers_output = 1

重新启动一切,仍然无法正常工作

nginx访问日志显示:

x.x.x.x - - [12/Dec/2014:19:25:08 -0200] "GET /merchant/customer/mobile/data?sEcho=1&iColumns=3&sColumns=%2C%2C&iDisplayStart=0&iDisplayLength=10&mDataProp_0=0&sSearch_0=&bRegex_0=false&bSearchable_0=true&mDataProp_1=1&sSearch_1=&bRegex_1=false&bSearchable_1=true&mDataProp_2=2&sSearch_2=&bRegex_2=false&bSearchable_2=true&sSearch=&bRegex=false&_=1418418256370 HTTP/1.1" 500 589 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"

请注意 500 错误,该错误应为错误.log以及发生在其他错误的 php 跟踪。

有什么线索吗?

当 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

希望对您有所帮助。

如果它帮助了其他人(谷歌把我带到这里),我遇到了类似的问题(虽然在Apache中,而不是nginx)。

我正在安装的一个较旧的应用程序给出了一个 500 错误,任何地方都没有输出,尽管每个可以想象的错误日志记录设置都变成了最详细的级别。

事实证明,问题出在有争议的错误控制运算符"@"上。正如文档中的红色警告框所述,无论您的日志记录多么冗长,如果 @ 前缀命令导致 PHP 因拼写错误或不可用而停止(例如,因为您忘记安装像 php-mysql 这样的关键模块),PHP 将退出,完全没有指示原因。

因此,如果您发现自己有 500 错误且没有日志,请检查您的代码库中是否有"@"符号。

验证 php-fpm 服务是否正在运行

sudo service php-fpm status

这将显示可以执行 php 的主机名。

接下来编辑 php.ini 以显示错误。 这将在页面上显示错误。使诊断变得容易

sudo vim /etc/php.ini

然后按键 [/] 并键入

display_errors

按键 [i] 用户箭头键和退格键设置 display_errors = 开

然后重新启动 php-FPM 服务

在系统类型redhat/centos等上。

sudo service php-fpm restart

如果你想在nginx错误日志文件中看到php-fpm错误堆栈跟踪(默认情况下为/var/log/nginx/error.log),启用

log_errors = On

如果您希望在浏览器中看到php-fpm错误堆栈跟踪,则设置

display_errors = On