nginx 限制ip请求某个url的频率

问题描述:
今天在统计nginx日志中,url访问频率的时候,发现一个接口访问次数远远大于其他的url。于是用tail -f查看实时日志,发现有个ip以每秒3-4次请求这个url。询问开发后,得知是第三方调用的,频率有点高,需要限制一下。

解决:
在nginx的http模块中添加以下配置

limit_req_zone $binary_remote_addr zone=query:10m rate=1r/s;

rate=1r/s 的意思是每个地址每秒只能请求一次

在server模块中添加一下配置

    location ~ /loan/query {
        limit_req zone=req_one burst=5;
        proxy_pass http://myapp;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

burst是指一共有5个令牌,发完后,只能根据rate的设定每秒新增一个

reload nginx的配置之后,再次查看日志。可以看到访问频率明显降下来了


QQ图片20180112144603.png