Nginx 504 Gateway Time-out

找出 Nginx 504 Gateway Time-out 的原因

Written by

Unsplash+

當 Nginx 發生 504 Gateway Time-out 時,如果不是 PHP 程式錯誤的情況下 (無窮迴圈),一般上原因是某一些程式執行需時較長時間,超出了 Nginx 的限制時,便會出現 504 Gateway Time-out 問題,這時我們的選擇就只有兩個,排除程式上的問題,或者升級主機 (伺服器)。

內容目錄:

  • 檢查 PHP Log 日誌
  • 檢查 fastcgi.conf 文件
  • 調整 Maximum File Upload Size

Webinoly 的開發者 Cristhian Martínez Ochoa 在 Support 論壇中有非常詳細的說明,當發生 504 Gateway Time-out 的狀況時,可以依照以下的說明,將問題找出來。

檢查 PHP Log 日誌

sudo log -php

文件位置在 /var/log/php/7.3/fpm.log

這裡有 2 個很重要的影響設定:

  • max_execution_time (/etc/php/7.3/fpm/php.ini)
  • request_terminate_timeout (/etc/php/7.3/fpm/pool.d/www.conf)

Webinoly 的預設值,兩者都設置為 300 seconds (5 分鐘),正常來說 5 分鐘的時間來處理 PHP 的程式執行請求是很足夠的時間,若還發生 504 的錯誤,就要看看 fpm.log 文件,哪邊造成了問題。

檢查 fastcgi.conf 文件

fastcgi_read_timeout (/etc/nginx/conf.d/fastcgi.conf)

預設值為 30 seconds,可以試著增加這個值,存檔文件後,記得重啟 Nginx

sudo nginx -t && sudo service nginx reload

調整 Maximum File Upload Size

有些 WordPress 的外掛和主題布景在安裝中,對系統的要求會比較高,例如:Slider Revolution 滑塊外掛就需要 upload_max_size 256M / post_max_size 256M,如果本身系統的設定不夠大,安裝過程中,也非常容易出現 Nginx 504 的狀況。

Webinoly 的預設值為 50M,依照你的需求,調高 upload_max_size / post_max_size 的值。

sudo webinoly -conf-value_max-mb-uploads=300

調整完之後,記得重啟 PHP。

sudo webinoly -server-reset=php

接著還要修改 nginx.conf 文件:

找到

client_max_body_size 50m;

修改為

client_max_body_size 300m;

存檔文件後,記得重啟 Nginx

sudo nginx -t && sudo service nginx reload

最後,還是一值出現 504 Gateway Time-out 的問題,請查看伺服器的的資源 (htop) 是不是已經吃緊了,換一台資源較大的伺服器試試了。

結語

還有一種最不想遇到的問題,就是有的外掛、主題安裝時,會連線回到外掛、主題開發商的伺服器下載文件,若是遇到連線過久時,還是會跳出 504 Gateway Time-out 的頁面,因為 Nginx 不能無限的等下去,所以時間過長時,就告訴你 504 的錯誤了。

如果有甚麼更好的建議,歡迎分享給我 !

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Your Mastodon Instance