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相关的工具,不然,后果自负,哈哈~
yegle 在 2009年12月30日 16:56 说:【 】
我发现nginx的配置真的很强大…
不过也可能是因为我没学过apache的配置…
Rei 在 2009年12月30日 17:06 说:【 】
nginx的配置文件好看。apache的一头雾水……
xLight 在 2009年12月30日 18:01 说:【 】
太邪恶了。。。
levon 在 2009年12月30日 18:07 说:【 】
这里真神奇,居然还有yegle
貌似这里牛人很多啊
骨头怎麼会说,订阅你的blog的人少呢
bones7456 在 2009年12月31日 08:40 说:【 】
呃。。。应该不多吧~呵呵~
Tweets that mention I am LAZY bones ? : nginx 对某些 User_Agent 进行限速的方法 -- Topsy.com 在 2009年12月30日 21:33 说:【 】
[…] This post was mentioned on Twitter by 骨头, corrie. corrie said: nginx 对某些 User_Agent 进行限速的方法 http://j.mp/6H00Tx […]
合金 在 2009年12月30日 22:22 说:【 】
Mozilla/4.0?why?
xiooli 在 2009年12月31日 00:10 说:【 】
你那个叫啥主页哦, windows 的去你那里搀和个啥,直接把 windows 平台的浏览器都给禁止了吧。省的迅雷又搞什么花样。
bones7456 在 2009年12月31日 08:41 说:【 】
比如,有个windows的朋友,本来很有可能转到linux的,用IE打开我的地址,想下载个Deepin用,结果死活打不开,结果他继续windows了,那我不是罪过了吗?所以,还是不要太暴力,哈哈。
wd 在 2009年12月31日 14:03 说:【 】
ua 应该不是很靠谱。之前看过一个文章说的就是 ua 这些事情,开始时 msie 标记,后来 firefox 出来,就加一个 mozilla 然后呢,也声明一下是 msie compatiable ,再后来就 etc ,那边个 ua 就越变越长。一些下载工具为了不被封掉,也就开始模仿这个 ua,尤其那些无得的下载工具。
bones7456 在 2009年12月31日 14:38 说:【 】
UA本来就不靠谱,你看我那wget都随便换UA,哈哈。
不过,话说回来,那些无德的工具,基本上都是含有MSIE的,而APT-HTTP没有MSIE,而且我相信也没有哪个下载工具会为我这站点特意去修改UA,所以,我的目的也就达到了,是吧?
yegle 在 2010年01月03日 00:23 说:【 】
在http context里不能用if?不能做全局限制了…
bones7456 在 2010年01月03日 13:48 说:【 】
放在 /etc/nginx/conf.d 里也不行吧?
Druggo 在 2010年01月04日 17:04 说:【 】
灭了迅雷那个UA清净多了,哈哈
Nginx: UserAgent based transfer rate limit | Planet Admon 在 2010年01月28日 12:13 说:【 】
[…] that the User-Agent for a web client can be easiliy modified. The Chinese version for this post is available here, and if you have any issues, welcome to our webmaster forums, thanks! Share […]