nginx 301的limit_req限制请求而不是错误页面

我在nginx后面的apache服务器上有一个批量search表单。 我希望保护该位置,以便在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,而不是显示一个ngnix错误页面时,我将如何301最终客户端? 另外,其次,我不想限制整个http子句的stream量。 我可以在没有费率的情况下设置一个limit_req_zone,但在我的位置节中有吗?

谢谢,

M.

默认情况下, 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