Google Cloud Armor正则匹配失效,需为GET/POST配置不同限流阈值
为GET和POST请求设置不同限流阈值的解决方案
问题背景
需要为以下两个同API的请求设置不同限流阈值:
- GET 请求:
GET /rest/v1/add - POST 请求:
POST /rest/v1/add/some-alpha-numeric-id-001
当前使用的正则匹配规则未生效,若仅用request.path.matches("/v1/add")会同时匹配两种请求,无法区分设置阈值。
现有规则的问题
- POST请求的正则存在拼写错误:将
/v1/误写为/vi/,直接导致匹配失效。 - 未结合请求方法判断,仅靠路径匹配可能出现跨方法的误匹配情况。
正确的匹配规则实现
匹配GET请求的规则
同时校验请求方法为GET,且路径精确匹配/rest/v1/add:
match { expr { expression = <<EOT request.method == "GET" && request.path.matches(R"/rest/v1/add$") EOT } }
- 用
$锚定正则结尾,确保路径不会包含后续的ID后缀。 - 结合
request.method == "GET"避免其他方法的请求被误匹配。
匹配POST请求的规则
同时校验请求方法为POST,且路径以/rest/v1/add/开头并包含后续ID:
match { expr { expression = <<EOT request.method == "POST" && request.path.matches(R"/rest/v1/add/.+") EOT } }
- 修正了原规则中的拼写错误,将
/vi/改为/v1/。 - 用
.+匹配任意非空的字母数字ID后缀。
额外注意事项
- Cloud Armor的RAW模式正则(
R""包裹)无需转义斜线,直接编写路径正则即可。 - 建议在Cloud Armor规则测试工具中验证匹配逻辑,确保符合预期。
- 若存在POST请求到
/rest/v1/add的场景,可单独添加规则处理,避免遗漏。
内容的提问来源于stack exchange,提问作者Roopendra
相关产品推荐
相关产品推荐

