我想将传入的请求限制为Nginx路由.
当前配置与此类似:
upstream up0 {
server x.x.x.x:1111;
keepalive 1024;
}
server {
location /auc {
limit_req zone=one burst=2100;
proxy_pass http://up0/auc;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
我想控制我在上游服务器上看到的请求数量.对于所有其他请求,我希望Nginx以204响应进行响应.
按传入请求的百分比控制也可以.
谢谢.
解决方法:
Nginx在使用limit_req_zone和limit_req限制请求方面非常有效.
首先创建一个已定义限制的区域.对于全局限制,区域的密钥可以是静态的,也可以使用诸如源IP地址之类的变量作为区域的密钥,这对于限制特定IP或网站上较慢的页面非常有用.速率可以在每秒或每分钟的请求中定义.
limit_req_zone key zone=name:size rate=rate;
接下来,创建一个规则以将该区域应用于传入请求.可以首先使用location指令将规则仅应用于特定请求,也可以是服务器范围.突发选项将对超过速率限制的指定数量的请求进行排队,并且可用于限制短突发流量而不是返回错误.
limit_req zone=name [burst=number] [nodelay];
超过速率限制但未保留在突发队列中的流量的默认响应代码是503(服务不可用).可以设置204(无内容)等替代代码.
limit_req_status code;
将所有这些放在一起是一个有效的配置,将位置块中的所有请求限制为每秒10个,缓冲区在返回错误之前排队最多50个请求并返回指定的204响应,如下所示:
http {
....
limit_req_zone $hostname zone=limit:20m rate=10r/s;
limit_req_status 204;
server {
...
location / {
...
limit_req zone=limit burst=50;
}
}
}
实际上,服务器块可能位于http块中包含的不同文件中.为了清楚起见,我刚刚将它们浓缩了.
要进行测试,请使用泛洪工具或将请求率设置为10r / m(每分钟10次)并使用浏览器.检查日志并监控被拒绝的请求数量非常有用,这样您就可以了解对用户的任何影响.
可以组合多个limit_req_zone规则来指定松散的全局限制,然后根据源IP限制更严格.这样可以在更广泛的用户群之前定位最持久的少数用户.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。