haproxy 里的超時


haproxy 中的超時

客戶端請求階段

  1. timeout client
    1. haproxy 和客戶端通信時,連接不活躍的時間,既不發送數據,也不ack接收的數據
    2. 如果未設置,則永不超時,此時連接是否超時依賴於tcp連接本身的機制
  2. timeout http-request
    1. tcp 連接建立后,直到所有頭部發送完畢的時間
    2. 如果未設置,則使用 timeout client 的值
    3. 如果 frontend 是 tcp 模式,則使用 backend 中的 timeout http-request
  3. timeout http-keep-alive
    1. 當開啟 option http-keep-alive 時,haproxy 處理完請求 A ,等待連接上請求 B ,請求 A 結束到請求 B 開始之間的間隔時間
    2. 如果未設置,則使用 timeout client
    3. 如果 frontend 是 tcp 模式,則使用 backend 中的 timeout http-keep-alive
  4. timeout client-fin
    1. 當客戶端和 haproxy 的連接的一端已經 shutdown 時,該連接不活躍的時間
    2. 如果未設置
      1. 非隧道連接,使用 timeout client
      2. 隧道連接,如 RDB/WebSocket ,使用 timeout tunnel

haproxy 轉發階段

  1. timeout queue
    1. 當 haproxy 接受客戶端請求后,如果暫時找不到可以立即轉發的后端,此時會將該連接放置在 backend 或者 server 的請求隊列中,等待有 server 可以處理請求時,就轉發過去
    2. timeout queue 指定的是,某個請求被放置在隊列中的最大時間,如果超時,則認為該請求不能被處理,返回 503 給客戶端
    3. 如果未設置,則使用 timeout connect
  2. timeout connect
    1. haproxy 和后端建立 tcp 連接的超時時間
    2. 如果未設置則永不超時

后端響應階段

  1. timeout server
    1. haproxy和后端通信時,連接不活躍的時間,即既不發送數據,也不 ack 接收的數據
  2. timeout server-fin
    1. 當 haproxy 和后端的連接的一端已經 shutdown 時,該連接不活躍的時間
    2. 如果未設置
      1. 非隧道連接,使用 timeout server
      2. 隧道連接,使用 timeout tunnel

特殊場景

  1. timeout tunnel

    1. 隧道連接的場景
      1. http 連接升級后 WebSocket 之后
      2. 轉發 CONNECT 請求 給http 代理
      3. tcp 連接
    2. 隧道連接建立后,該連接雙向不活躍的時間,即連接上既不發送數據,也不接收數據
    3. 當連接轉換為隧道連接后,timeout client/timeout server 都將被 timoeut tunnel 取代
  2. timeout tarpit

    1. 當 http 請求被 http-request tarpit 指令標記后,haproxy 會將連接維持 timeout tarpit 的時間,如果超時后,該連接仍然未關閉,就回復 500 響應碼給客戶端,參看 http-request tarpit 的說明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM