NGINX 仅对成功的请求启用速率限制
NGINX enable rate limiting only on successful requests
有没有办法只对成功的请求(即 HTTP 状态代码 200)启用速率限制?
例如,在我的配置中的以下片段中...
http {
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/m;
server {
location / {
limit_req zone=test;
proxy_pass http://localhost:3000/;
...
}
...
}
...
}
...请求已成功进行速率限制(每分钟最多两个请求)。
但是,由于这是一个向我发送电子邮件的联系表格,如果 http://localhost:3000/
returns 出现错误,我不关心速率限制,因为不会发送任何电子邮件。
没有,没有。
Nginx从读取请求到发送响应分11个阶段处理HTTP请求:post-read、server-rewrite、find-config、rewrite、post-rewrite、pre-access , 访问, post-access, try-files, 内容, 日志.
proxy_pass
在content phase
而limit_req
在pre-access phase
(参考ngx_http_limit_req_module.c
),pre-access phase
处理程序在[=之前执行11=] 处理程序,因此 limit_req 处理程序无法检查响应代码是否正确。
有没有办法只对成功的请求(即 HTTP 状态代码 200)启用速率限制?
例如,在我的配置中的以下片段中...
http {
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/m;
server {
location / {
limit_req zone=test;
proxy_pass http://localhost:3000/;
...
}
...
}
...
}
...请求已成功进行速率限制(每分钟最多两个请求)。
但是,由于这是一个向我发送电子邮件的联系表格,如果 http://localhost:3000/
returns 出现错误,我不关心速率限制,因为不会发送任何电子邮件。
没有,没有。
Nginx从读取请求到发送响应分11个阶段处理HTTP请求:post-read、server-rewrite、find-config、rewrite、post-rewrite、pre-access , 访问, post-access, try-files, 内容, 日志.
proxy_pass
在content phase
而limit_req
在pre-access phase
(参考ngx_http_limit_req_module.c
),pre-access phase
处理程序在[=之前执行11=] 处理程序,因此 limit_req 处理程序无法检查响应代码是否正确。