是否可以設置一個動態變量來保存HTTP頭的內容,例如主機/ X-Forwarded-Host,稍後會在ACL中使用?如何在HAProxy中設置動態變量?
frontend web1
# ...
set-var s1(Host)
acl site1 hdr_end(host) -i %[s1]
# ...
use_backend %[s1] if site1
是否可以設置一個動態變量來保存HTTP頭的內容,例如主機/ X-Forwarded-Host,稍後會在ACL中使用?如何在HAProxy中設置動態變量?
frontend web1
# ...
set-var s1(Host)
acl site1 hdr_end(host) -i %[s1]
# ...
use_backend %[s1] if site1
這裏有一些技巧。您根本不需要變量來根據主機地址設置ACL,並使用這些ACL選擇後端。這將是簡單的像這樣:
frontend web1
# ...
acl site1 hdr(host) -i example.com
acl site2 hdr(host) -i example.net
# ...
use_backend com if site1
use_backend net if site2
這就是你想要做的,或者你是否想要完成更復雜的事情?
UPDATE:下面是如何基於主機頭選擇一個後端:
frontend web1
# ..
http-request set-var(req.s1) req.hdr(Host),field(1,:),lower,regsub(\.,_,g)
use_backend %[var(req.s1)]
backend example_com
# ..
backend example_net
# ..
這將設置一個變量,它是在該請求的上下文中有效,使用小寫Host頭部,並與週期值替換爲下劃線。事實上,你甚至不需要一個變量:
frontend web1
# ..
use_backend %[req.hdr(Host),field(1,:),lower,regsub(\.,_,g)]
HAProxy的將返回503,如果該主機頭相匹配後端無法找到。如果你想要這樣的請求去別的地方,我可以設置一個default_backend
(我測試過這個,至少在1.6.3中有效)。
什麼版本的HAproxy? – mwp
我正在使用1.6.3 – aristit