NGINX仅在成功请求时启用速率限制

时间:2018-04-07 14:49:13

标签: nginx reverse-proxy rate-limiting

是否有办法仅为成功的请求启用速率限制(即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/返回错误,我不关心速率限制,因为不会发送电子邮件。

1 个答案:

答案 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处理程序无法检查响应代码是否正常。