zoukankan      html  css  js  c++  java
  • Nginx + php-fpm 执行 PHP 脚本超时 报错 502 Bad Gateway + 504 Gateway Time-out 的解决办法

    上周写好的发送邮件的计划任务只发送了一部分,检查计划任务日志,发现 502 Bad Gateway 的错误(已经在脚本中设置了 set_time_limit(0))。

    后来在网上查找资料,可以通过以下设置来解决脚本超时导致 502 Bad Gateway 的问题(Nginx + php-fpm,CentOs 系统):

    ① Nginx 设置

    修改 nginx.conf:

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

    重启 nginx。

    ② php-fpm 设置

    修改 php-fpm.conf:

    request_terminate_timeout = 0s

    重启 php-fpm:

    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

    ③ 在 php 脚本中设置

    ini_set("max_execution_time", 0); 

    或者在 php.ini 中把 max_execution_time 设为一个比较大的值。

    502 问题得到解决。

    然而脚本在执行一段时间之后,又报了 504 Gateway Time-out 的错误,再适当把 nginx.conf 的 fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout 等数值调大:

    fastcgi_connect_timeout 3000;
    fastcgi_send_timeout 3000;
    fastcgi_read_timeout 3000;

    35 分钟发 600+ 邮件(PHPMailer)不报 504 错误。

    另外最好设置一张数据库表来记录哪些用户的邮件已经发送成功,这样在脚本终止之后重新执行不会重复发送邮件。测试的时候可以用 126 邮箱(同一 QQ 邮箱连续接收 60 封后就不在收件了)。

    参考:http://www.linuxidc.com/Linux/2014-10/108012.htm

  • 相关阅读:
    Unable to connect to Command Metric Stream 'api/turbine/stream?cluster=REPORTS' Error: {"isTrusted"}
    Spring Boot Admin 1.5.7
    Druid Spring Boot Starter
    09: mysql基础面试题
    08: mysql主从原理
    07: mysql锁和事物隔离
    06: mysql索引查找原理及调优
    05: MySQL高级查询
    04: Mysql性能优化
    02: MySQL的安装与基本配置
  • 原文地址:https://www.cnblogs.com/dee0912/p/4929345.html
Copyright © 2011-2022 走看看