Proxy
使用 haproxy 將多個子域定向到單個後端
我正在使用 haproxy 為在單個伺服器上執行的多個應用程序直接路由。對於正在使用的域之一,有幾十個子域應定向到少數應用程序之一。
目前,我在單獨的行中列出了所有這些子域。我的前端配置如下所示:
frontend http-in bind *:80 acl alpha hdr(host) -i alpha.com acl beta hdr(host) -i beta.com acl gamma00 hdr(host) -i apple.gamma.com acl gamma01 hdr(host) -i banana.gamma.com acl gamma02 hdr(host) -i cherry.gamma.com acl gamma03 hdr(host) -i durian.gamma.com acl gamma04 hdr(host) -i elderberry.gamma.com acl gamma05 hdr(host) -i fig.gamma.com acl gamma06 hdr(host) -i grapefruit.gamma.com acl gamma hdr(host) -i gamma.com use_backend a if alpha use_backend b if beta use_backend sub1 if gamma00 use_backend sub1 if gamma01 use_backend sub1 if gamma02 use_backend sub2 if gamma03 use_backend sub2 if gamma04 use_backend sub2 if gamma05 use_backend sub2 if gamma06 use_backend g if gamma default_backend default
有沒有辦法以更簡潔的形式實現類似的結果?這樣的列表是否有效,還是在某個時候切換到正則表達式會更好?
為了最大限度地保持性能(避免每次點擊都使用正則表達式)但仍然清理配置,我會在此處為您的 ACL 使用外部文件。例如,假設您有一個名為 的文件
/etc/haproxy/sub1urls
,這正是:apple.gamma.com banana.gamma.com cherry.gamma.com
然後在您的配置中,ACL 可能只是:
acl is_sub1 hdr(host) -i -f /etc/haproxy/sub1urls
以相同的方式將其他主機放入
sub2urls
文件中可將您的配置減少到:frontend http-in bind *:80 acl alpha hdr(host) -i alpha.com acl beta hdr(host) -i beta.com acl is_sub1 hdr(host) -i -f /etc/haproxy/sub1urls acl is_sub2 hdr(host) -i -f /etc/haproxy/sub2urls acl gamma hdr(host) -i gamma.com use_backend a if alpha use_backend b if beta use_backend sub1 if is_sub1 use_backend sub2 if is_sub2 use_backend g if gamma default_backend default
這使得維護這些其他文件變得非常容易,因為它們只是主機列表。它打開了誰可以編輯它們的列表,並且暴露的風險也更少。例如,我們有人在 puppet 中像這樣編輯這些 ACL 列表,他們根本不需要知道 HAProxy 配置語法。