文章彙整

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

By Astral Web 3 years agoNo Comments
首頁  /  網站設計與開發  /  解決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/

 

 

 

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  網站設計與開發

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。