实现 Nginx 针对某一特定请求参数匹配,例如 GET /app?c=get_SMS_code,
如要实现流控由于 if 中无法直接使用 limit_req 等配置,需要设置一个error_page来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http {
limit_req_zone $binary_remote_addr zone=ip:20m rate=1r/s;
server {
location / {
error_page 666 = @limit;
if ( $query_string = "c=get_SMS_code" ) { return 666; }
if ( $args ~ "c=get_SMS_code" ) { return 666; }
# etc...
}
location @limit {
limit_req zone=ip burst=5;
}
}
}