在Nginx下针对IP和目录限速
本文将向您介绍如何在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; } }