Linux Nginx在PHP解析错误后发送状态200

Linux Nginx在PHP解析错误后发送状态200,linux,nginx,fastcgi,php,Linux,Nginx,Fastcgi,Php,我已经在Ubuntu上用php fpm配置了nginx(一切都很好) 我遇到的一件事是,当发生PHP解析错误时,会发送HTTP状态代码200。错误日志包含以下条目: [error]3205#0:*2854 FastCGI在stderr中发送:“PHP解析错误:语法错误,第32行的/var/www/../index.PHP中出现意外的T_REQUIRE_”,同时从上游读取响应头,客户端:1.2.3.4,服务器:example.com;请求:“GET/HTTP/1.1”,上游:fastcgi://1

我已经在Ubuntu上用php fpm配置了nginx(一切都很好)

我遇到的一件事是,当发生PHP解析错误时,会发送HTTP状态代码200。错误日志包含以下条目:

[error]3205#0:*2854 FastCGI在stderr中发送:“PHP解析错误:语法错误,第32行的/var/www/../index.PHP中出现意外的T_REQUIRE_”,同时从上游读取响应头,客户端:1.2.3.4,服务器:example.com;请求:“GET/HTTP/1.1”,上游:fastcgi://127.0.0.1:9000,主机:“example.com”

我不明白,为什么不发送一个代码50x。我没有配置任何错误页面设置,我已阅读。我还尝试设置状态代码(错误为_page500=500/50x.html等等)。但始终返回状态200


我可以从PHP发送状态头(
header('HTTP/1.1404未找到')
),这很有效。但是,对于PHP解释器发出的错误(也是未捕获的异常),服务器的响应不考虑是否发生了错误

仅供参考,对于PHP5.4及更高版本,Xdebug(2.2)中已经修复了这一问题。遗憾的是,它需要对PHP进行更改,以使其能够正常工作,而不能向后移植到5.3。

这就是它在每个Web服务器上的响应方式,您确定要这样做吗?我的意思是,不管怎样,它实际上没有任何用处,你的脚本不应该失败,在开发过程中,如果你能读取错误,状态200是可以的。如果状态代码不是200,更新的浏览器通常使用他们自己的错误页,所以你不能读取错误,这会使调试更加困难。幸运的是,你是对的。我刚刚注意到mod_php还发送了关于php错误(解析错误、未捕获异常)的状态200。那真是卑微。。我不关心如何调试错误(因为在生产环境中应该关闭display_errors),但我真的很惊讶PHP以错误的方式进行调试,并以“OK”状态代码输出错误。怪不得谷歌到处都是PHP错误消息。。幸运的是,这不是由PHP引起的,而是由xdebug引起的: