HAProxy ACL配置:如何基于目标端口或地址路由流量
我之前刚好处理过几乎一模一样的HAProxy路由需求,给你一套直接可用的配置方案,很快就能解决问题:
第一步:定义直接转发的后端
先在HAProxy配置文件里新增一个专门指向192.168.1.10:8080的后端,这样我们有明确的目标可以转发:
backend direct-to-10-8080 server target-server 192.168.1.10:8080 check # check是可选参数,用来定期检测后端服务器可用性
第二步:在前端配置ACL和路由规则
找到你当前的frontend区块(比如叫main或者其他,根据你的现有配置来),添加两个ACL和对应的路由逻辑:
frontend main bind *:80 # 替换成你实际监听的端口,比如443如果是HTTPS服务 # 第一个ACL:精准匹配来自客户端192.168.1.106的请求 acl client_from_106 src 192.168.1.106 # 第二个ACL:匹配请求的目标是192.168.1.10:8080(根据实际请求场景选一种) # 场景1:客户端请求的Host头是192.168.1.10:8080(比如浏览器直接输入这个地址) acl target_10_8080 hdr(host) -i 192.168.1.10:8080 # 场景2:如果不需要匹配Host头,仅根据客户端IP直接转发,可省略第二个ACL # 当同时满足两个ACL条件时,使用我们定义的直接转发后端 use_backend direct-to-10-8080 if client_from_106 target_10_8080 # 默认情况下,仍用原有的privoxy-back后端处理其他请求 default_backend privoxy-back
关键说明
src是HAProxy用来匹配客户端源IP的关键字,这个ACL会精准拦截来自192.168.1.106的所有请求。hdr(host)用来匹配HTTP请求头里的Host字段,-i参数是忽略大小写,确保匹配更宽松。use_backend的优先级高于default_backend,所以只要满足ACL条件的请求,会直接跳转到我们定义的后端,完全绕过privoxy-back。
配置验证与生效
修改完配置后,先检查语法是否正确:
haproxy -f /etc/haproxy/haproxy.cfg -c
如果输出Configuration file is valid,就可以重启HAProxy让配置生效:
systemctl restart haproxy # 适用于systemd系统,其他系统用对应的重启命令
内容的提问来源于stack exchange,提问作者me2017




