精品軟體與實用教程
504網關逾時
Nginx突然報錯504網關逾時,在使用php對資料庫進行大量查詢操作時,偶爾會報錯504網關逾時。遇到504網關逾時也不用怕,只是個別操作會造成504網關逾時,重新刷新逾時頁面,也可以繼續進行資料庫連接操作,只是比較麻煩,下面看一下如何解決Nginx 504網關逾時的問題。
通常會有以下幾種情況導致504網關逾時:
- 網站程式處理大量數據,導致等待時間過長,造成504網關逾時。
- web程式中呼叫外部請求時,由於外部請求回應逾時,所造成的504網關逾時。
- 連接SQL資料庫失敗後,沒有及時停止程序,造成死循環後,產生的504網關逾時。
504網關逾時的問題出在Nginx的設定。下面登入伺服器,開啟nginx的設定檔。可以使用xshell或者Xftp工具登入伺服器,前者是在Linux系統中進行修改,後者是透過SSH的SFTP方式進行檔案修改。
修改nginx配置
修改/etc/nginx/nginx.conf 文件。
在http {}的區塊中加入參數:
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
fastcgi_read_timeout 6000;
下面來看看這幾個參數都有什麼作用。
fastcgi_connect_timeout
fastcgi連線逾時時間,預設60秒
fastcgi_send_timeout
nginx 程序向fastcgi 程序發送請求程序的逾時時間,預設值60秒
fastcgi_read_timeout
fastcgi 程序向nginx 程序發送輸出過程的逾時時間,預設值60秒
另外,在nginx中,還有針對代理商超時的參數設定。
proxy_connect_timeout 20000;
proxy_send_timeout 20000;
proxy_read_timeout 20000;
proxy_connect_timeout
nginx跟後端伺服器連線逾時時間(代理連線逾時)
proxy_send_timeout
後端伺服器資料回傳時間(代理發送逾時)
proxy_read_timeout
連線成功後,後端伺服器回應時間(代理接收逾時)
關於代理商超時參數配置這部分,如果你的Nginx沒有對外提供代理服務,可以忽略此處設定。
Nginx修改完畢後,使用nginx -t 查看以下設定檔是否正確,然後重新啟動nginx服務。
systemctl restart nginx
修改PHP配置
1.修改/etc/php.ini 文件,在php.ini檔案中尋找max_execution_time ,單位秒。
max_execution_time
max_execution_time 是php腳本最大執行時間,預設時間30秒,建議修改值300秒。
2.在/etc/php-fpm.d 中,修改 http://www.conf 文件。尋找request_terminate_timeout,單位秒。
request_terminate_timeout
設定單一請求的逾時時間,建議設定6000
3.可以在PHP程式中可加入 set_time_limit(seconds) 設定最長執行時間
例如:set_time_limit(0) 表示不逾時。
在php中修改完參數後,重新啟動php服務。
systemctl restart php-fpm
總結
以上就是修改nginx 504閘道逾時的辦法,一般在資料量比較大的環境中會照成網關逾時。透過上述的解決辦法,透過延長逾時時間的辦法,暫時解決了504網關逾時,最後還是要優化網站程式和資料庫才是最終的解決方案。