Назад | Перейти на главную страницу

Перенаправление шаблона 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

Поскольку ваш путь содержится в начале 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

Путь 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 вариант, см. документация для подробностей.