私はhaproxyを使用して、単一のサーバーで実行されている複数のアプリケーションへの直接ルートを設定しています。使用中のドメインの1つには、数十のサブドメインがあり、いくつかのアプリケーションの1つに転送する必要があります。
現在、これらのサブドメインをすべて別の行にリストしています。私のフロントエンド構成は次のようになります:
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
これにより、他のファイルはホストのリストにすぎないため、管理が非常に簡単になります。誰がそれらを編集できるかというリストが開き、リスクも軽減されます。たとえば、これらのACLリストをパペットでこのように編集し、HAProxy構成構文をまったく知る必要がない人がいます。