在Nginx下针对IP和目录限速

jopen 9年前

    本文将向您介绍如何在Nginx下对IP和目录进行限速,在某种应用场景下,这也是个常见需求。

Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个目录来限速。

示例:

limit_zone one $binary_remote_addr 10m;       location / {             limit_conn one 1;             limit_rate 100k;     }


说明:

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

然后针对目录进行设定。

limit_conn one 1;


是限制每个IP只能发起一个连接。

limit_rate 100k;


是对每个连接限速100k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate x 2。

 

Nginx 监控

上述配置中,首先我们定义了一个 location ~ ^/NginxStatus/,

这样通过 http://localhost/NginxStatus/ 就可以监控到 Nginx 的运行信息,显示的内容如下:

Active connections: 70   server accepts handled requests   14553819 14553819 19239266   Reading: 0 Writing: 3 Waiting: 67

NginxStatus 显示的内容意思如下:

active connections – 当前 Nginx 正处理的活动连接数。

server accepts handled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。

reading -- nginx 读取到客户端的 Header 信息数。

writing -- nginx 返回给客户端的 Header 信息数。

waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。


nginx防盗链

location ~* \.(gif|jpg|png|swf|flv)$ {  root html  valid_referers none blocked *.nginxcn.com;  if ($invalid_referer) {  rewrite ^/ www.nginx.cn  #return 404;  }  }