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 的錯誤了。
如果有甚麼更好的建議,歡迎分享給我 !
發佈留言