几周前,我在 Google 网站管理员工具中注意到我的几个 URL 返回了 502。
其中一个 URL 是http://www.sau.com.au/forums/topic/437438-around-the-bay-wrap-up/
此 URL 对于任何桌面皮肤都返回 502,但在移动设备(不同皮肤)上工作正常
请注意,它很快返回 502,这表明它不是执行或某种形式的超时。
除少数类似 URL 外,网站上所有其他 URL 均正常。
唯一有帮助的日志条目就是这个;
2015/06/29 09:33:39 [错误] 19650#0:*4431763 上游在读取上游的响应标头时过早关闭了 FastCGI 标准输出,客户端:94.228.34.203,服务器:sau.com.au,请求:“GET /forums/topic/437438-around-the-bay-wrap-up/ HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”,主机:“www.sau.com.au”,引荐来源:“http://www.sau.com.au/forums/forum/100-victoria/“
我还重启了 APC,但没用。碎片率只有 1.5%。
我找不到任何已达到限制的条目。服务器配置相当高,因此 PHP 拥有大量内存、请求大小以及较长的超时时间。
我尝试了下面读到的内容但没有什么不同。
fastcgi_buffer_size 10240k;
fastcgi_buffers 4 10240k;
我不太愿意做任何大的改动,因为这只是针对部分页面。有一个帖子建议将 PHP 更新到 5.5。
我不知道现在该去哪里寻求进一步的帮助。我的下一步该怎么做?
一些信息;
nginx version: nginx/1.6.2
PHP 5.3.3 (fpm-fcgi) (built: Oct 30 2014 20:14:56)
更新 1
PHP 错误日志中没有写入任何内容。但已启用错误日志记录;
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
更新2
dmesg 似乎没有更新,并且没有 kernel.log;
-rw-r--r-- 1 root root 41179 Dec 18 2014 dmesg
解决
我正在按照@sa289的建议安装XDebug这个答案为此,我需要将 PHP 5.3 更新到 PHP 5.5。我希望这能自行解决问题,但并没有。因此,我安装了 XDebug 并将 zend_extension 添加到 php.ini,重新启动 PHP,502 就消失了。我再次注释掉 zend 扩展,502 又回来了。XDebug 来救场了。虽然无法确定原因或真正的解决方案,但这对我来说已经足够了。
答案1
我会使用 Xdebug 查看崩溃的位置。Xdebug 可用于执行所谓的跟踪,它会告诉您执行的每一行代码,这样您就可以看到崩溃前运行的最后一行代码,从而为您指明正确的方向。您可以让它仅在设置了某个 cookie 时进行跟踪,这样您就不会为每个请求生成跟踪日志。请特别检查以下配置设置:
xdebug.trace_enable_trigger
xdebug.trace_output_dir
xdebug.collect_params
xdebug.trace_output_name
(我喜欢“trace.%p.%t”,因为它将 PID 放在文件名中,这在某些情况下很有帮助)
看http://xdebug.org/docs/all_settings有关这些配置参数以及其他参数的详细信息。