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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM