如何根据路径将 HAproxy 配置为不同的后端?

如何根据路径将 HAproxy 配置为不同的后端?

问题是,我已为多个具有各自后端的域配置了 haproxy。预期行为是将特定请求(例如)重定向到 ,myfirstdomain.com/alerts并且backend2已配置的后端myfirstdomain.com仍配置为提供backend1

当前 haproxy.cfg

frontend https_443_frontend
  bind *:80
  bind *:443 ssl crt build_rupid_in.pem crt code_rupid_in.pem crt artifacts_rupid_in.pem crt prodmon_rupid_in.pem crt prodmondb_rupid_in.pem

  acl ACL_backend0 hdr(host) -i myzerodomain.com
  use_backend backend_backend0 if ACL_backend0

  acl ACL_backend1 hdr(host) -i myfirstdomain.com
  use_backend backend_backend1 if ACL_backend1

backend backend_backend0
  mode http
  server app01 127.0.0.1:9909

backend backend_backend1
  mode http
  server app02 127.0.0.1:9990

我尝试过

ACL_alerts path -i -m alerts
use_backend backend2 if ACL_backend1 ACL_alerts
backend backend2
  mode http
  server app2 127.0.0.1:9999

我还应该更改什么,请帮助我理解这是如何工作的。我想我需要添加http-request replace-pathhttp-response replace-something。我不确定这是如何工作的。请帮我解决这个问题。

答案1

您可以使用path_beg匹配。您也可以选择/alerts从 URI 中删除部分内容。

frontend https_443_frontend
  bind *:80
  # ssl stuff
 
  use_backend backend2 if { path_beg /alerts/ }
  # fallback for non-matching requests
  default_backend backend1

backend backend1
  mode http
  server app01 127.0.0.1:9909

backend backend2
  mode http
  http-request replace-path /alerts(/)?(.*) /\2
  server app02 127.0.0.1:9990

相关内容