我有一個 haproxy 伺服器,後面有幾個後端。後端採用循環法挑選;無論如何,如果它從所選後端得到 404,我需要它嘗試其他後端。
如果所有可存取的後端都回傳 404,haproxy 應該會向客戶端傳回 404。
那可能嗎?
答案1
不,這是不可能的(到目前為止)。
當請求發送之前發生錯誤(例如連線逾時)時,HAProxy 會重試另一台後端伺服器。如果與一台後端伺服器建立連線並傳送請求,即使是一個位元組,HAProxy 也不會嘗試使用另一台後端伺服器。
答案2
No. 是 HAProxy 擁有的最接近的東西,但如果> 0 並且與後端的連接失敗,option redispatch
它只會重試不同的後端。retries
它不關心來自後端的HTTP狀態代碼,它只關心後端是否down(無法訪問,無回應)
答案3
是的,如果我正確理解的話,可以選擇
option httpchk GET /../CheckHealth.html
http-check disable-on-404
其中CheckHealth.html 應該是可存取的資源範例,如果找不到資源並收到404 錯誤,則該節點已設定為“活動或備份軟停止進行維護”,並且循環不再向該節點發送請求,切換到僅其他人。
就像是 :
backend backend_servers
balance roundrobin
option httpchk GET /.../CheckHealth.html
http-check disable-on-404
server www01 XX:YY:ZZ:KK:8180 check
server www02 XX:YY:ZZ:MM:8180 check
server www03 XX:YY:ZZ:FF:8180 check
將在 www02 上失敗,因為那裡沒有部署 WAR,並且在 www01、www03 上保持平衡,不會顯示任何故障給客戶端。