nginx 301'ing limit_req 速率限制请求而不是错误页面

nginx 301'ing limit_req 速率限制请求而不是错误页面

我在 nginx 后面的 apache 服务器上有一个批量搜索表单。我想保护该位置,以便 10 分钟内的第二个请求被 301 重定向到“您想使用我们的 API 吗”页面,而不是类似以下内容:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
       location = /search/bulk {
                limit_req zone=one burst=2;
                 ...  SOME CONFIG HERE...
       }
    }
}

当最终客户端达到我的 limit_req 时,我该如何 301 重定向而不是显示 ngnix 错误页面?另外,其次,我不想限制整个 http 子句的流量。我可以设置不带速率的 limit_req_zone,但将它们放在我的位置节中吗?

谢谢,

M.

答案1

默认情况下,nginx将返回503 service temporarily unavailable错误代码。

limit_req_status指令用于在遇到以下情况时更改错误代码limit_req

location = /search/bulk {
          limit_req zone=one burst=2;
          limit_req_status 404;
}

问题是该指令仅允许从 400 到 599 的范围,因此您无法指定301

[emerg] 3130#0: value must be between 400 and 599 in /etc/nginx/nginx.conf:72

因此,如果您的主要问题是显示自定义错误消息而不是默认503消息,则可以这样做:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
       location = /search/bulk {
                limit_req zone=one burst=2;
                error_page  503  /503.html;
       }
       location  /503.html {
            internal;
       }
    }
}

然后您的自定义503.html文件:

<html><body>Would you like to use our API ?</body></html>

rate参数是必需的。您必须指定一个速率limit_req_zone

相关内容