Пересылка шаблона URL-адреса HAProxy

Пересылка шаблона URL-адреса HAProxy

Я использую HAProxy для балансировки нагрузки нескольких веб-серверов (режим HTTP). Веб-серверы строго динамические, т.е. нет никакого статического контента, только веб-сервисы.
URL-адреса типа (аналогичные)

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

Теперь, когда я настраиваю HAProxy для пересылки входящих запросов на эти 3 URL-адреса на нескольких машинах, я указываю url_path с помощью aclи path_end/ path_beg, но при размещении запроса получаю 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 на web_server с url_path?.

Если HAProxy получает его как http://192.168.5.2:80/small, то отправляет запрос на веб-сервер какhttp://192.168.5.10:8080/small

решение1

Поскольку ваш путь содержится в начале URL, почему бы не использовать path_beg? Рекомендуется использовать path_end для расширений имен файлов.

        acl is_small путь_beg -i /small
        acl is_medium path_beg -i /medium
        acl is_large path_beg -i /large

решение2

Путь HTTP-запроса:всегдапередано на внутренний сервер, т.е.

GET /small HTTP/1.1

будет виден за HAproxy как просто этот запрос. Если вы подозреваете, что это каким-то образом усекается до

GET / HTTP/1.1

на сервере за HAproxy, вы должны проверить это с помощью

tcpdump -i any port 8080 -As1024 | grep GET

на этом сервере и просмотрите входящие GETзапросы.

Я рискну предположить, что вы ожидаете, что HAproxyвставлятьчто-то в начале URI, например

    server web_1 192.168.5.14:8080/my/path check

превратит запрос на /smallв запрос на /my/path/small. Этого можно добиться с помощью reqrepопции, см.документациядля получения подробной информации.

Связанный контент