nginx 错误日志 没有记录 PHP错误的原因

本文讨论了PHP错误信息未在NGINX错误日志中记录的问题,解释了PHP错误日志与NGINX错误日志之间的交互流程,并揭示了在不同PHP版本下错误日志处理的区别。通过实例演示了如何解决该问题,即关闭xdebug以恢复正常的错误日志记录。

事情是这样子的:

前一段时间,网站php出错后,具体的错误信息,没有显示出来,以为是输出到NGINX的错误日志里了,但是NGINX的错误日志没有PHP的错误信息,只有一些系统错误。

搞了很久,最后是通过改php-fpm.conf 配置,将PHP错误直接输出在浏览器里。


一开始我是改php.ini 里 的:

display_errors=On

但是没有效果。后来测试,原来是php-fpm.conf里的配置会覆盖php.ini。这个只能在php-fpm.conf里改。


但是我想不明白 为什么nginx里的错误日志 没有记录PHP的,且PHP出错时返回的http状态码是200,而不是500?


后来我整理了php-nginx的流程

在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了


我用的是5.2版本,那就是 php输出的错误日志 给其他应用截断了,造成错误信息 没有输出到nginx的错误日志里

经过验证,原来是给xdebug截断了,关掉xdebug,日志恢复正常,PHP出错也是显示500了。






### Nginx 405 错误原因及解决方案 #### HTTP 方法不被允许 当客户端尝试使用服务器未配置支持的方法访问资源时,会触发此错误。例如,如果试图向仅接受 `GET` 请求的 URL 发送 `POST` 请求,则可能会遇到这种情况[^1]。 对于此类情况,建议检查应用程序逻辑以及前端到后端之间的交互方式,确认请求使用的HTTP动词是否正确无误。另外,在Nginx配置文件中可以指定哪些方法是可以针对特定位置或路径来处理: ```nginx location /api { limit_except GET POST OPTIONS { } } ``` 上述代码片段展示了如何限定 `/api` 路径下只允许 `GET`, `POST` 和 `OPTIONS` 请求通过。 #### 缺少适当权限设置 有时即使请求本身合法有效,但如果Web应用框架或者反向代理层(如PHP-FPM)缺乏执行相应操作所需的权限也会返回405状态码。此时应确保所有涉及组件都拥有足够的读写权限去完成预期的任务,并且防火墙规则不妨碍正常通信流程。 #### 配置不当引起的限制 某些情况下,默认安装后的web server可能出于安全考虑禁用了部分功能特性;或者是自定义修改过的站点配置存在缺陷从而阻止了正常的HTTP行为发生。这时应当仔细审查相关设定项并参照官方文档调整至合理范围之内。 为了更好地诊断具体问题所在,可以通过查看Nginx的日志记录获取更多线索。通常这些日志位于 `/var/log/nginx/error.log` 文件内,其中包含了每次失败响应背后更详细的解释说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值