web-dev-qa-db-ja.com

HAproxyは、すべてのHTTPリクエストを単一のフロントエンドから単一のバックエンド(複数のポート)にリダイレクトします

私はhaproxyをインストールしましたが、それは正常に動作します。現在、次のような構成があります。

frontend public_http
        # Listen on port 80
        bind *:80
        mode http
        # Define ACLs for each domain
        acl acl_webtest  hdr(Host) -i -f /etc/haproxy/acls/webtest
        use_backend back_web_test if acl_webtest

backend back_web_test
        mode http
        balance roundrobin  # Load Balancing algorithm
        option httpchk
        option forwardfor
        server webtest 192.168.0.123:80 weight 1 maxconn 512 check

ご覧のとおり、着信HTTPトラフィックを同じポートのバックエンドにリダイレクトしています(HTTPのデフォルトは80)。

しかし、私の質問:
bind *:<port>ステートメントの束なしで単一のフロントエンドを作成し、同じ<port>への単一のバックエンドにリダイレクトすることは可能ですか?ただし、HTTPトラフィックのみ。 HTTPのデフォルトポートが80であることは知っていますが、HTTPリクエストを任意のポートに送信できます。

TCPプロキシのように見えますが、ドメインに基づいてバックエンドにリダイレクトする必要があり、TCPレイヤー(OSI 4)はドメインについて何も知りません。

だから私は私の問題を明確に説明したことを願っています。

助けていただければ幸いです。

1
CROSP

server行の:portを省略することでこれを行うことができます

frontend public_http
    # Listen on port 80 to 1024, included
    bind :80-1024
    # Listen on ports 8088, 8080, 8000
    bind :8088,:8080,:8000
    mode http
    # Define ACLs for each domain
    acl acl_webtest  hdr(Host) -i -f /etc/haproxy/acls/webtest
    use_backend back_web_test if acl_webtest

backend back_web_test
    mode http
    balance roundrobin  # Load Balancing algorithm
    option httpchk
    option forwardfor
    server webtest 192.168.0.123 weight 1 port 80 maxconn 512 check

この構成では、クライアントが接続しているのと同じポートにバックエンド接続が確立されます。サーバー回線の個別のportキーワードは、ヘルスチェックに使用されます。

3
nmerdan