web-dev-qa-db-ja.com

HAProxy URLパターン転送

いくつかのWebサーバー(HTTPモード)の負荷分散にHAProxyを使用しています。 Webサーバーは厳密に動的です。つまり、静的コンテンツはなく、Webサービスのみです。
タイプ(類似)のURL

http://192.168.5.10:8080/small
http://192.168.5.10:8080/medium
http://192.168.5.10:8080/large

今、いくつかのマシンでこれらの3つのURLに着信要求を転送するようにHAProxyを構成するとき、aclおよびpath_end/path_begを使用してurl_pathを指定していますが、 Not Found on Acceleratorエラーが表示され、問題を特定することが難しくなります。

以下は、私が使用している構成です。また、エラーはログに記録されません。

    global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      10000
        srvtimeout      10000

frontend http_proxy
        bind 192.168.5.9:8888
        acl is_small path_end -i small
        acl is_medium path_end -i medium
        acl is_large path_end -i large

        use_backend web_server_small if is_small
        use_backend web_server_medium if is_medium
        use_backend web_server_large if is_large

backend web_server_small
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.10:8080 check
        server  web_2 192.168.5.11:8080 check

backend web_server_medium
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.12:8080 check
        server  web_2 192.168.5.13:8080 check

backend web_server_large
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.14:8080 check
        server  web_2 192.168.5.15:8080 check

HAProxyからurl_pathを使用してweb_serverにリクエストを送信することはできますか?.

HAProxyがそれをhttp://192.168.5.2:80/smallとして受信した場合、リクエストをhttp://192.168.5.10:8080/smallとしてWebサーバーに送信します。

5
Some guy

パスがURLの先頭に含まれているため、path_begを使用しないのはなぜですか。path_endの推奨される使用法は、ファイル名拡張子です。

 acl is_small path_beg -i /small
 acl is_medium path_beg -i /medium
 acl is_large path_beg -i /large
5

HTTPリクエストのパスはalwaysであり、バックエンドサーバーに渡されます。

GET /small HTTP/1.1

hAproxyの背後にそのリクエストと同様に表示されます。これが何らかの形で切り捨てられていると思われる場合

GET / HTTP/1.1

hAproxyの背後にあるサーバーで、これを使用して確認する必要があります

tcpdump -i any port 8080 -As1024 | grep GET

そのサーバーで、インバウンドGETリクエストを監視します。

私は手足を伸ばしていて、HAproxyがURIの前に何かをinsertすると期待していると仮定します。

    server web_1 192.168.5.14:8080/my/path check

/small/my/path/small。これはreqrepオプションを使用して実現できます。詳細については documentation を参照してください。

3
Felix Frank