歐斯瑞官網全新上線!專業團隊持續為您服務!

解決Nginx與php-fpm發生504 Gateway Time-out問題

解決Nginx與php-fpm發生504 Gateway Time-out問題

Nginx與php-fpm

會發生504 Gateway Time-out的問題,如果是非程式錯誤的情況下(例:無窮迴圈),通常是發生在有些需要長時間運算的頁面,這時我們的選擇就只有兩個,買更好的主機,或是延長504判斷的時間。

實際上,504的問題並不只會發生在Nginx+php-fpm的環境,任何伺服器環境都有可能發生,今天只是舉Nginx+php-fpm的設定檔修改為例子。

 

今天這個問題會在Nginx+php環境發生的原因,是因為php執行程式碼的時間預設是無限的,運算到結果出來為止;但Nginx不能無限的等下去,所以時間過長時,Nginx就告訴使用者"504″的錯誤。

因此我們今天可以對Nginx與php的設定參數進行適當的調整,讓這個錯誤在正常狀況下不會發生,影響網站的運作。

 

1.如果我們確定網站上的php程式碼不應該跑太久,例如說30秒,那我們可以設定php程式碼執行時間最長為30秒:

 

找到max_execution_time,取消註解並修改為30

/etc/php5/fpm/php.ini

…
max_execution_time = 30
...

 

2.接下來請到nginx的網站設定檔中(一般來說位置在/etc/nginx/sites-available),例如我們今天修改一個叫abc.com.conf的設定檔:
取消註解或增加fastcgi_read_timeout設定為30

/etc/nginx/site-available/abc.com.conf

//請找到這個php設定的部份
location ~ .php$ {
...
    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_read_timeout 30;
...
}
...

 

3.這樣設定就完成了,之後重啟php-fpm與nginx載入新設定:

指令

service nginx restart
service php-fpm restart

 

補充:

1.這兩個設定的時間(此次舉例為30秒),請視網站需要做調整,例如我的系統要運算報表可能會跑很久,那就該增加設定時間,防止報表還沒跑完就中斷顯示504;

 

2.建議這兩個時間設定為相同時間(此例為設定相同的30秒),因為設定沒有相同是沒有意義的,尤其是如果php > Nginx,php還沒跑完,Nginx就已經中斷並顯示504,這樣就看不到網頁結果了。

 

 

 

參考資源:

http://stackoverflow.com/questions/5412672/php-max-execution-time-30-seconds-but-ran-a-script-for-2-hours

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout

https://rtcamp.com/tutorials/php/increase-script-execution-time/

 

 

 

分享此文章

我要留言

你的電子郵件位址並不會被公開。 必要欄位標記為 *


WHY ASTRALWEB

讓歐斯瑞陪伴,安心開展電商渠道

具備官方認證的專業團隊,與您一起開創業績前線

架構規劃

不容忽略的建置根基,依需求通盤考量,打造安全穩定的網站

系統整合

ERP、POS、CRM...等系統串接,有效增進企業內部操作效率

功能客製

市面既有功能無法滿足需求?就交給歐斯瑞客製開發

資安保障

掌握最新網路安全訊息,即時提供應有配套措施

速度優化

優化網頁載入速度,讓客戶得到更佳體驗,增進黏著度

即時監控

不停休的監控服務,快速協助解決異常問題

(02)2928-0909