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_passcontent phaselimit_reqpre-access phase(参考ngx_http_limit_req_module.c),pre-access phase处理程序在[=之前执行11=] 处理程序,因此 limit_req 处理程序无法检查响应代码是否正确。