HAProxy基于HTTP方法重写HTTP请求

HAProxy rewrite HTTP requests based on HTTP method

我有 REST API。

为了简单起见,假设我有两个服务:

如何将所有 read 请求(GET 方法)重写为 read.request.com 和所有 write 使用 HAProxy 向 write.request.com 请求(POST、PUT、DELETE 方法)?

不太确定哪一个适用于您的情况,但希望是。

一个后端

我想这就是你的情况。

frontend http-in
    bind *:80

    acl is_post method POST
    acl is_get  method GET

    http-request set-header Host write.request.com if is_post
    http-request set-header Host read.request.com if is_get

    default_backend api

backend api
    server one localhost:8080 check

所有这一切都是检查正在使用哪种方法,并在将请求传递给 localhost:8080.

之前相应地设置 Host header

两个后端

在此设置中,您有一个代码实例 运行 仅用于读取请求,另一个实例仅用于写入请求。在这种情况下,读取代码是 localhost:8080 上的 运行,写入代码是 localhost:8081 上的 运行。

frontend http-in
    bind *:80

    acl is_post method POST
    acl is_get  method GET

    use_backend write if is_post
    use_backend read  if is_get

backend write
    http-request set-header Host write.request.com   #optional
    server write_one localhost:8081 check

backend read
    http-request set-header Host read.request.com    #optional
    server read_one localhost:8080 check

此选项与前一个选项一样,通过检查正在使用的方法开始,但它不是使用一个 HAProxy 后端,而是分成两个。每个后端中的 http-request 行对于此配置是可选的。

希望对您有所帮助。