HAProxy基于HTTP方法重写HTTP请求

aer*_*zov 1 load-balancing haproxy

我有REST API.

为简单起见,我想说有两项服务:

  • read.request.com
  • write.request.com

我怎样才能将所有读取请求(GET方法)重写为read.request.com,并将所有写入请求(POST,PUT,DELETE方法)重写为带有HAProxy的write.request.com

Jam*_*ewy 9

不太确定哪些适用于您的情况,但希望有一个.

一个后端

我想这是你的情况.

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
Run Code Online (Sandbox Code Playgroud)

所有这一切都是检查正在使用的方法,并Host在传递请求之前相应地设置标头localhost:8080.

两个后端

在这个设置中,你只有一个代码实例只运行读取请求而另一个实例只运行写请求.在这种情况下,读取代码正在运行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
Run Code Online (Sandbox Code Playgroud)

通过检查正在使用的方法,此选项与前一个选项相同,但不是使用一个HAProxy后端,而是分成两个.http-request每个后端内部的行对于此配置是可选的.

希望有所帮助.