利用Nginx模块ngx_http_limit_req_module对系统进行限流

时间:2017-05-22作者:klpeng分类:Web服务器浏览:3211评论:0

ngx_http_limit_req_module 模块用于限制对每个定义键的请求处理速率,例如,单客户端IP的每秒请求数。实现的原理是使用“漏桶”原理。

配置指令如下:

http {
limit_req_zone $binary_remote_addr zone=kzone:10m rate=200r/s;
...

说明:区域名称为kzone,大小为10m,每秒QPS不能超过200。

server {
...
location ~* ^/tools/ {
limit_req zone=kzone burst=10 nodelay;
}

说明:允许超过频率限制的请求数不多于10个,nodelay表示超出的请求不延迟等待,直接拒绝。

如果想对整个应用做QPS限制,可以使用$server_name作为key,不用$binary_remote_addr。


上面的配置,如果限制域kzone的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误,如果要设置响应拒绝请求的状态码,可以在http, server, location段配置

limit_req_status 503;  #在这里可以改成其他状态码

基本上完整的配置就是这样了。

至于QPS设置多少合理,需要对系统进行压力测试。压测的过程中并发数会影响QPS。因此,需要不断调整并发连接数多次压测。

如果想限制并发连接数,可以尝试使用nginx的ngx_http_limit_conn_module模块。


打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢