You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HAProxy中使用映射文件批量阻止指定域名+路径的请求

如何在HAProxy中使用映射文件批量阻止指定域名+路径的请求

当然可以!HAProxy的映射(map)功能完美解决了你这种需要批量维护域名+路径黑名单的痛点,再也不用在配置里写一堆重复的ACL,管理起来省心太多了。下面一步步给你讲具体怎么做:

1. 创建黑名单映射文件

先准备一个纯文本文件,比如命名为blocked_domains_paths.map,每行按域名+路径 任意值的格式写(值随便填,比如1,我们只需要判断这个条目是否存在):

example.com/test-path 1
example2.com/another-path 1
# 可以加注释,空行会被自动忽略
example3.com/admin 1

如果需要匹配某个路径下的所有子路径(比如example.com/test-path/abc也想拦截),可以在路径末尾加*做前缀匹配:

example.com/test-path* 1

2. 修改HAProxy配置,加载映射并添加拦截规则

在你的HAProxy前端(frontend)配置块里,添加以下内容:

frontend your_frontend_name
    bind *:80  # 你的监听端口
    # 把Host头转成小写(避免大小写不匹配),再和请求路径拼接成一个字符串,比如example.com/test-path
    http-request set-var(req.block_key) hdr(host),lower,concat(req.path)
    
    # 检查拼接后的字符串是否在黑名单映射文件里
    # 如果是精确匹配用下面这行
    acl is_blocked var(req.block_key) -f /full/path/to/blocked_domains_paths.map
    # 如果是前缀匹配(对应映射文件里带*的条目),用下面这行替代上面的ACL
    # acl is_blocked var(req.block_key) map_beg(/full/path/to/blocked_domains_paths.map) 1
    
    # 匹配到就拒绝请求
    http-request deny if is_blocked

3. 生效与维护

  • 配置修改完后,重新加载HAProxy让配置生效:systemctl reload haproxy(使用systemd的系统)或者kill -SIGUSR2 $(pidof haproxy)
  • 后续要更新黑名单的话,直接编辑blocked_domains_paths.map文件,然后重新加载HAProxy即可,不需要重启服务

额外说明

  • 用hdr(host),lower转小写是为了避免大小写问题,比如Example.com和example.com都能被正确匹配
  • 映射文件的路径一定要写绝对路径,避免HAProxy找不到文件
  • 如果你的HAProxy版本低于2.0,map_beg可能不支持,这种情况下可以用path_beg结合Host的ACL,不过还是建议升级到新版本获得更灵活的匹配能力

备注:内容来源于stack exchange,提问作者kzn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:44:13