NGINX 502报错 debug过程及解决方法


前几天做web开发时遇到一个很棘手的问题,经过2天的debug终于解决。在此记录一下解决过程。

问题来源

出现问题的部分是一个用户信息导入的模块,模块大概的功能是:用户上传一个csv文件,文件中包含几万条用户的信息数据,需要写入后台数据库。这块代码的逻辑是,用户点击上传按钮,通过jQuery.ajax异步调用一个后台脚本,读入csv文件,然后把数据一条一条写入数据库。但是在代码执行过程中,后台脚本总是运行到一半就停止了。

解决过程

一开始我以为是脚本代码内部有问题,或者是写入数据库的时候发生了错误;但是后台日志显示这部分代码是正常运行的,代码应该是没有问题。于是我多进行了几次模拟测试,发现每一次异常停止时,脚本运行的时间都是100-110s这个区间内,因此异常出现的原因应该是脚本运行超时导致的。

接着我输出了jQuery.ajax返回error时的捕捉到的错误:

错误码是502,下面还有一个nginx,果断百度。

果然有这个nginx里面有timeout的设置项。问题基本上已经算找到了,下面就是修改了。

修改过程

修改配置文件里面的timeout参数

找到php-fpm.conf文件,打开

把这两项的值根据系统具体需求调大。

然后改的过程中还发现php.ini与nginx.conf里面也有timeout的设置

这两块的值也是根据系统需要调大。

重启php-fpm和NGINX

然后就是重启php-fpm和NGINX了:

命令行输入 ps aux|grep php-fpm找到php-fpm的进程号(找这个master process)

然后输入 kill -USR2 进程号 重启php-fpm

接着输入nginx -t测试一下刚刚对nginx.conf的修改有没有问题。没有的话,输入nginx -s reload完成NGINX的重启。

全部搞定以后,重新测试功能,发现可以正常运行结束了。大功告成!