这两天迁移了一个过去的Web服务到另外一个服务器,本来按照提前设定的步骤,操作结果都很顺利。但是谁想,迁移完成内部测试,“咣”,HTTP ERROR 500。

这是一个基于Linux + Nginx + PHP框架的系统。根据我的经验,这种错误基本上都是后端的 PHP 脚本问题导致的。它报错之后,出于安全防护考虑,PHP-FPM直接返回了500 error,就是报告内部 服务器 错误给Nginx,浏览器就看到了提示。

这种问题,要排查出来,首要的一个步骤就是尽可能的在减少安全隐患的情况下,搜集错误信息。Web系统因为安全原因,线上的错误提示都是关闭的。但是也有办法单独的给出现问题的系统打开。软件问题错综复杂,影响因素很多,必须尽快隔离错误、定位问题原因。

对于 PHP 系统,有好多处会影响错误日志的输出。有个建议是:对于修改的配置,先做个备份。使用日志文件,记录你刚才修改了什么文件,然后找到问题后,根据自己的修改还原回去。这样避免定位问题时,改了一大堆,却忘记还原回去。这样会留下很大的问题。

下面是可以输出日志的配置点及其工具,后面有想到的内容会继续补充。

1、php.ini配置文件

生产环境配置是:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

display_errors = Off

display_startup_errors = Off

如果着急排查问题,可以复制一份php.ini备份,先把选项打开,排查完恢复配置

error_reporting = E_ALL

display_errors = On

display_startup_errors = On

对php.ini的修改,需要重启php-fpm服务。对它的直接修改会影响全局,如果必要可以不改php.ini,修改PHP框架入口。现在开发系统都用框架,入口文件就一个,修改很方便,一般都是index.php。

在入口文件开头,加入:

error_reporting(-1); // reports all errors ini_set(“display_errors”, “1”); // shows all errors ini_set(“log_errors”, 1); ini_set(“error_log”, “/tmp/php-error.log”);

这样就覆盖了php.ini的配置。

此外,还有一个注意事项,PHP如果打开了OPcache,它是有刷新时间的。比如默认设置成60秒刷新,意味着你对PHP文件的修改,不会立刻生效。在一些时刻可能会误导你,以为修改没有产生任何作用。

2、 Nginx 的配置

Nginx系统的配置文件很灵活。错误输出可以全局配置,也可以单独根据需要配置。全局文件一般在安装目录的conf/nginx.conf

具体语法这里不讲,可以去查询。这个日志指令可以放在开始的地方:

error_log /home/wwwlogs/error_nginx.log crit;

把crit改成error。不过不建议在这里更改。nginx有配置文件的include功能,建议单独在需要打开日志的server配置中添加这行指令,改成error。

3、使用xdebug和strace

xdebug是非常强大的调试工具。我喜欢用PHP,估计有一半原因是因为有它,断点调试易如反掌。

使用指令:pecl install xdebug 即可自动下载编译安装。但是需要修改php.ini,添加xdebug模块后,还要重启php-fpm服务。

如果还找不到问题根源,就要拿起重量级武器了:strace,这是一个强大的调试工具,它可以追踪程序的系统调用、文件读写,对于追查问题很有帮助。

使用如下指令打开对php-fpm执行过程的追踪:

strace $(pidof “php-fpm” | sed ‘s/\([0-9]*\)/-p \1/g’) -o phpstrace

不过追踪时间不能长,因为输出的日志量可能非常大,不利于分析。建议只追踪一次出问题的调用,就关闭,然后打开phpstrace日志文件分析。

经过分析,发现是一个模块的代码,语法出错了。可是,此代码从未修改过,前面也运行的十分正常。马上想起来,此服务器的PHP运行环境是7.0,前面的服务器环境是7.1,所以语法出现兼容性问题。百密一疏。把PHP运行环境升级到7.1最新版本,解决问题。

php 错误500排错,如何排查Web服务器HTTP ERROR 500的错误?相关推荐

  1. html500错误原因1003无标题,web工程中404/500错误页面配置+404页面模板

    [实例简介] web工程中404/500错误页面配置+404页面模板 [实例截图] [核心代码] 247959a9-c3ea-4360-8e57-105d680b29f0 ├── 404页面模板 │  ...

  2. php fatal error 500,PHP在Linux下出现HTTP ERROR 500解决方法

    如图,出现HTTP ERROR 500说明你的php代码里可能有错,默认php的错误不会输出到浏览器 修改配置文件sudo vim /etc/php.ini #CentOS sudo vim /etc ...

  3. idea创建web项目运行报404错误_使用IDEA新建Web工程启动报404的错误

    新换了一个项目组被人吐槽配置文件都能写错,所以打算从头开始一步步搭建一个项目,包含ssm基础框架.mongodb工具类.redis工具类.jsf配置.log配置等 今天先来搭建一个web工程.工程搭建 ...

  4. python错误解决方案之关于报urllib2.HTTPError: HTTP Error 401: Unauthorized错误问题

    报错信息: Traceback (most recent call last):   File "<pyshell#18>", line 1, in <modul ...

  5. 【转】“无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域”错误提示的解决...

    错误提示: 无法在Web服务器上启动调试.您不具备调试此应用程序的权限,此项目的URL位于Internet区域 一般用下面的方法可以解决: 1:确认在"配置属性"中的"启 ...

  6. Web 服务器错误代码大全

    目录 400 - 错误的请求. 401 - 访问被拒绝.IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因.这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示: 401.1 ...

  7. http隐藏服务器相关配置信息,apache web服务器安全配置

    尽管现在购买的云服务器很多都有一键web环境安装包,但是如果是自己配置web环境则需要对各种安全配置十分了解,今天我们就来尝试这做好web服务器安全配置.这里的配置不尽完善,若有纰漏之处还望指出. 修 ...

  8. 无法在WEB服务器上启动调试,Web 服务器配置不正确

    访问IIS元数据库失败  思考可能是次序出了问题,解决  1.打开CMD,进入 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727  2.输入 aspnet_r ...

  9. 无法在WEB服务器上启动调试,Web 服务器配置不正确 解决

    无法在WEB服务器上启动调试,Web 服务器配置不正确 解决 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:of ...

最新文章

  1. 如何实现链接只能被点击一次
  2. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  3. python爬虫代码1000行-Python 你见过三行代码的爬虫吗
  4. 从0开始搭建一个战棋游戏的AI(初级教程)
  5. django 给单个文件加log_django配置日志模块
  6. [Web开发] Web程序调式的利器 - Fiddler (HTTP协议监视工具)
  7. linux应用程序固件升级,试试用 Linux 中的 fwupd 更新 ThinkPad 固件
  8. 聊天软件开发_0_开篇
  9. 置换贴图,法线贴图和凹凸贴图详解
  10. 视频剪辑教程,视频批量分割,分割后的新视频怎么保存
  11. Winform中datagridview显示数据时,不显示特殊符号,如下划线不显示问题
  12. 使用函数求余弦函数的近似值 (15 分)
  13. HTTP方法的安全性和幂等性
  14. 记2020年第十一届蓝桥杯感想
  15. Unity UGUI图文混排源码--优化版
  16. centOS 8 重启网络服务 / 重启网卡
  17. lua的使用(摘自luachina)
  18. 有助于改善睡眠的产品有哪些,效果最好的五款助眠产品
  19. python3基础教程雪峰_[雪峰磁针石博客]python3快速入门教程2数据结构1变量与赋值...
  20. [Ahoi2008] Meet 紧急集合 (LCA+倍增+rmq-st)

热门文章

  1. golang | windows平台golang环境搭建(过坑之后)
  2. DIY(也即Build Your Own) vSAN时,选择SSD需要注意的事项
  3. RedHat6.7安装教程,图解,超详细
  4. Logstash + DataHub + MaxCompute/StreamCompute 进行实时数据分析
  5. 分库分表学习总结(5)——有关分库分表相关面试题总结
  6. Java基础学习总结(119)——Java8 JVM与Java7 JVM比较
  7. 技术人员如何创业《一》- 产品及想法
  8. chararray遍历_数组遍历的三种方法
  9. .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录
  10. React-Router 4 两个常用路由变量