![如何根据路径将 HAproxy 配置为不同的后端?](https://linux22.com/image/792951/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E8%B7%AF%E5%BE%84%E5%B0%86%20HAproxy%20%E9%85%8D%E7%BD%AE%E4%B8%BA%E4%B8%8D%E5%90%8C%E7%9A%84%E5%90%8E%E7%AB%AF%EF%BC%9F.png)
问题是,我已为多个具有各自后端的域配置了 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-path
和http-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