HAProxy Url 模式转发

HAProxy Url 模式转发

我正在使用 HAProxy 对几个 Web 服务器进行负载平衡(HTTP 模式)。Web 服务器是严格动态的,即没有任何静态内容,只有 Web 服务。
以下类型的 URL(类似)

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

acl现在,当我配置 HAProxy 将传入请求转发到几台机器上的这 3 个 URL 时,我使用and path_end/指定 url_path 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

是否可以使用 url_path 将请求从 HAProxy 发送到 web_server?

如果 HAProxy 收到如下内容http://192.168.5.2:80/small,则将请求发送至 Web 服务器:http://192.168.5.10:8080/small

答案1

由于您的路径包含在 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

答案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,请参阅文档了解详情。

相关内容