AP端(如 php)執行時間太久(如超過 30秒),且沒回應給 Web Sever 任何訊息
就會被 Web Server 擋掉出現 504 Timeout 訊息
<?php
for($i=1;$i<=300;$i++) {
sleep(1);
echo "$i<br>";
}
?>
例如上面這樣的 php,跑超過 30 秒(指 apache httpd內定值), Web Server 沒收到沒回應任何字元, 就會被 Web Server 給 503 擋掉
1.先記錄 request 花費多久時間,就出現 504 Timeout 訊息 (如超過 60秒)
2.檢查 apache httpd 設定檔案是否有 TimeOut n 的設定 :
/etc/httpd/conf/httpd.conf
TimeOut 60
*通常 httpd.conf 不會有這一行,內定值是 60 秒
將 TimeOut 值加大(例如 100) 再測試
1.先記錄 request 花費多久時間,就出現 504 Timeout 訊息 (如超過 60秒)
2.檢查 fastcgi_read_timeout 設定值 (內定值是 60)
NGINX fastcgi_read_timeout 設定說明
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 66s;
::
}
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
send_timeout 60s;
不過,一般網頁執行超過 60秒時,真正要檢討的,應該是後端的 AP 的問題
如 PHP 或資料庫
究竟是 PHP 執行太慢? 還是資料庫存取太慢?
跟 504 timeout 有關的 php.ini 設定,如:
其它 50x 相關資訊:
HTTP 回應狀態碼 500 Internal Server Error
若網站是由 Cloudflare CDN 處理流量
相關的 timeout 秒數資料:
參考: