今天执行表单提交时,服务器上报一个502错误

因为表单是提交一篇文章插入数据库,文章内容有30K,本地测试了一下,处理时间在12s以上,也能正常插入,但在生产服务器出现502错误,之前觉得可能是nginx的问题,就加大了fastcgi相关的过期时间,原来为120。

fastcgi_connect_timeout 320;
fastcgi_send_timeout 320;
fastcgi_read_timeout 320;

还是没有成功,于是怀疑是php.ini的问题,可能为php的POST数据量和最大执行时间

max_execution_time = 30

post_max_size = 8M

而提交的数据远不需要这么大的值,问题不在此。于是继续寻找,可能问题出在php-fpm.conf里,php-fpm是管理php-cgi的进程管理器,这里也能定义请求处理的最大时间 request_terminate_timeout

原设置为10

request_terminate_timeout = 10,

改为
request_terminate_timeout = 60,

重启php-fpm:

service php-fpm restart

POST成功!

参考了下面一篇文章,链接在文章结束,里面还列举了其他502错误的情况。

原文描述为

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:request_terminate_timeout这个值是max_execution_time,就是fast-cgi的执行脚本时间。

 

通过来源: Nginx 502错误触发条件与解决办法汇总 – 51CTO.COM

- EOF -