504 Gateway Timeout 問題、解決

2024-06-15

504 timeout

504 Gateway Timeout 原因之一:

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 擋掉

解決:檢查 Web Server 設定

Apache httpd 2.4

1.先記錄 request 花費多久時間,就出現 504 Timeout 訊息 (如超過 60秒)

2.檢查 apache httpd 設定檔案是否有 TimeOut n 的設定 :

/etc/httpd/conf/httpd.conf

TimeOut 60 

*通常 httpd.conf 不會有這一行,內定值是 60 秒

將 TimeOut 值加大(例如 100) 再測試

Apache HTTPD TimeOut 設定說明

NGINX

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 設定,如:

  • max_execution_time = 300
  • max_input_time = 300


其它 50x 相關資訊:

  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported
  • 506 Variant Also Negotiates
  • 507 Insufficient Storage
  • 508 Loop Detected
  • 510 Not Extended
  • 511 Network Authentication Required

HTTP 回應狀態碼 500 Internal Server Error




若網站是由 Cloudflare CDN 處理流量

相關的 timeout 秒數資料:

Connection limits



參考:

https://kinsta.com/blog/504-gateway-timeout/

分類:雲端      217
Tag apache , httpd , nginx , Timeout ,
留言

留言
top