nginx 出現504 Gateway Time-out的解決方法

本文介紹nginx出現504 Gateway Time-out問題的緣由,分析問題並提供解決方法。php


1.問題分析
nginx訪問出現504 Gateway Time-out,通常是因爲程序執行時間過長致使響應超時,例如程序須要執行90秒,而nginx最大響應等待時間爲30秒,這樣就會出現超時。
 
一般有如下幾種狀況致使nginx

1.程序在處理大量數據,致使等待超時。
2.程序中調用外部請求,而外部請求響應超時。
3.鏈接數據庫失敗而沒有中止,死循環從新連。數據庫

出現這種狀況,咱們能夠先優化程序,縮短執行時間。另外一方面,能夠調大nginx超時限制的參數,使程序能夠正常執行。服務器

對於訪問超時的設定,nginx與php都有相關的設置,能夠逐一進行修改。php-fpm

 

2.解決方法
nginx配置優化

nginx.conf中,設置如下幾個參數,增長超時時間spa

#修改Nginx配置:
fastcgi_connect_timeout 1200s;#原設置爲300s
fastcgi_send_timeout 1200s;#原設置爲300s
fastcgi_read_timeout 1200s;#原設置爲300s
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;

這裏最主要的設置是前三條,即

fastcgi_connect_timeout #同 FastCGI 服務器的鏈接超時時間,默認值60秒,它不能超過75秒;
fastcgi_send_timeout #Nginx 進程向 FastCGI 進程發送 request ,整個過程的超時時間,默認值60秒;
fastcgi_read_timeout #FastCGI  進程向  Nginx  進程發送 response ,整個過程的超時時間,默認值60秒;

 


php配置code

php.iniblog

max_execution_time 
php腳本最大執行時間

display_errors = on 
memory_limit = 256M

  

php-fpm進程

request_terminate_timeout
設置單個請求的超時時間

 
php程序中可加入set_time_limit(seconds)設置最長執行時間

例如 set_time_limit(0) 表示不超時。

相關文章
相關標籤/搜索