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

如何在HAProxy中通过文件动态匹配URL与方法类型定义ACL

刚好之前做过类似的HAProxy规则配置,给你两种实用的实现方式,根据你的需求选就行:

1. 直接在HAProxy配置中定义URL+方法组合的ACL

如果你的规则数量不多,直接写在配置里最直观。你可以通过path和method指令的组合来匹配特定请求,多个规则还能通过or合并:

# 单个URL+方法组合的ACL
acl http_denied_request path /admin/delete method POST
http-request deny if http_denied_request

# 多个组合的场景:先定义单个规则,再合并成一个总ACL
acl denied_admin_delete path /admin/delete method POST
acl denied_secret_get path /public/secret method GET
acl denied_user_update path /api/users/* method PUT
acl http_denied_request denied_admin_delete or denied_secret_get or denied_user_update
http-request deny if http_denied_request
2. 从外部文件加载URL+方法组合

如果规则需要频繁修改,或者数量较多,把规则放在外部文件里更便于管理。HAProxy的concat指令可以把请求方法和路径拼接成字符串,再通过-f参数加载外部文件匹配:

第一步:创建规则文件

比如创建/etc/haproxy/deny_rules.list,每行写一个“方法+空格+URL”的组合,支持glob通配符:

POST /admin/delete
GET /public/secret
PUT /api/users/*
DELETE /api/posts/*

第二步:在HAProxy配置中引用文件

# 拼接请求方法和路径,匹配外部文件中的规则
acl http_denied_request concat("%[method]", " ", "%[path]") -f /etc/haproxy/deny_rules.list
http-request deny if http_denied_request

额外注意点

  • 如果需要忽略大小写匹配,可以在concat后面加上-i参数,比如concat(...) -i -f ...
  • 确保HAProxy进程有读取该外部文件的权限
  • 修改外部规则后,需要重新加载HAProxy配置(systemctl reload haproxy)才能生效

内容的提问来源于stack exchange,提问作者Ritikesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:09