I am LAZY bones? AN ancient AND boring SITE

2009年 12月 30日 的归档

nginx 对某些 User_Agent 进行限速的方法

本文为nginx 禁止某个 User_Agent 的方法的姊妹篇,不知所云的话,建议先看看这文。
由于之前已经将某个特别疯狂的迅雷的User_Agent给封掉了,所以最近一段时间,我的那源服务器也运行地比较稳定,但是今天,Linux Deepin 9.12正式发布了,由于我给Deepin做了一个iso的镜像,所以服务器又经历了一个访问高峰,如下图:

从这里也可以看出Linux Deepin的受欢迎程度,哈哈。
可以看到从11:00以后,100M的带宽就已经被完全撑满了。。。一看日志,大部分又是迅雷干的,但这次迅雷不是用某个特定的UA来访问了,而是各有变化,但是却都包含MSIE,哈哈。
当然IE用户直接访问的话,也会有这个MSIE,但是没办法,为了保全Ubuntu APT-HTTP的合法权益,只能限制一下MSIE了。
但是怎么限制呢?总不能人家用MSIE的连主页面都打不开吧?哈哈,最好的办法就是限速,于是,有了这个配置:

server {
        listen   80;
        server_name  ubuntu.srt.cn;
        access_log  /var/log/nginx/mirror.access.log;
        location / {
                root   /data/mirrors;
                autoindex on;
                index  index.html index.htm;
                if ($http_user_agent ~ "MSIE") {
                        limit_rate 2k;
                }
                if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {
                        return 404;
                }
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}

让我们邪恶的看一下效果,哈哈:
wget的默认UA的时候:

$ wget --no-cache http://u.srt.cn/ubuntu/ls-lR.gz -O /dev/null
--14:08:28--  http://u.srt.cn/ubuntu/ls-lR.gz
           => `/dev/null'
正在解析主机 u.srt.cn... 211.155.227.167
Connecting to u.srt.cn|211.155.227.167|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:8,051,367 (7.7M) [text/plain]
 
100%[====================================>] 8,051,367      6.34M/s             
 
14:08:29 (6.33 MB/s) - `/dev/null' saved [8051367/8051367]

UA里含有MSIE的时候:

$ wget --no-cache --user-agent="Something with MSIE; bla bla" http://u.srt.cn/ubuntu/ls-lR.gz -O /dev/null
--14:07:59--  http://u.srt.cn/ubuntu/ls-lR.gz
           => `/dev/null'
正在解析主机 u.srt.cn... 211.155.227.167
Connecting to u.srt.cn|211.155.227.167|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:8,051,367 (7.7M) [text/plain]
 
 0% [                                     ] 49,152         2.08K/s  ETA 1:02:38

某个该死的特定UA:

$ wget --no-cache --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" http://u.srt.cn/ubuntu/ls-lR.gz -O /dev/null
--14:09:22--  http://u.srt.cn/ubuntu/ls-lR.gz
           => `/dev/null'
正在解析主机 u.srt.cn... 211.155.227.167
Connecting to u.srt.cn|211.155.227.167|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 404 Not Found
14:09:22 错误 404:Not Found。

从上图也可以看到,做了这个设置以后,从14:00左右开始,服务器的流量虽然还是比较大,但是已经趋于正常了。
所以,偶尔要从我源里下东西的同学,可以用firefox直接下载,也可以用axel或者wget之类的工具下,但是千万别用IE相关的工具,不然,后果自负,哈哈~