是否有办法仅为成功的请求启用速率限制(即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/
返回错误,我不关心速率限制,因为不会发送电子邮件。
答案 0 :(得分:1)
不,没有。
Nginx从读取请求到发送响应的11个阶段处理HTTP请求:后读,服务器重写,查找配置,重写,重写后,访问前,访问,后访问,尝试文件,内容,记录。
proxy_pass
位于content phase
,而limit_req
位于pre-access phase
(请参阅ngx_http_limit_req_module.c
),pre-access phase
处理程序在content phase
之前执行处理程序,因此limit_req处理程序无法检查响应代码是否正常。