web-dev-qa-db-ja.com

haproxyを使用して複数のサブドメインを単一のバックエンドに誘導する

私は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

より簡潔な形で同様の結果を達成する方法はありますか?そのようなリストは効果的ですか、またはある時点で正規表現に切り替える方が良いでしょうか?

10
Hubert OG

パフォーマンスを最大に保ち(すべてのヒットで正規表現を回避)、それでも構成をクリーンアップするには、ここで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構成構文をまったく知る必要がない人がいます。

15
Nick Craver