解决 Nginx 在分发大文件时 Block 浏览器请求的情况

(不要问 Ovear 为什么最近突然诈尸了,我也不知道(:з」∠)

起源

接上一篇,Ovear 买了一大堆奇奇怪怪的 VPS 之后,弄了一个 CDN 又弄了一个图床,又闲得无聊想试试做个视频 CDN,于是在原本的 CDN 上面上传了几个视频文件,然后用浏览器打开,结果发现卡!住!了!,整个请求页面都 Block 住了。然而 Wget 却是没有这个问题(:з」∠)

发发牢骚

VJLY52AXPUS3YEQ1BH-1024x102487425.jpg

MoeTu 一个支持 HTTPS 的图床

好久没写文章了,发一篇凑凑数嘻嘻

小插曲: Google 这是要倒闭了么,升级最新版的 Chrome 就一直崩溃,刚才写的一堆东西都没了。。 GG

起因

最近闲得无聊检查了下手头上的 VPS/服务器,结果发现自己手上有一大堆,有的甚至闲置了一年。

作为买买买小能手的 Ovear 平时见到便宜的 VPS 就想买,然后就买了一大堆闲置- -(看来以后要少逛些那些奇奇怪怪的论坛了(:з」∠)),然而这些服务器基本还都是传家宝系列,又舍不得扔掉,就只能放那吃灰了。

寻思着做些什么能够用上这些服务器,先做了个 CDN 给自己和关系不错的菊苣用,然后发现(:з」∠),这。。全都挂的博客,好像还是闲置啊。。

不行我不服(╯‵□′)╯︵┻━┻,我要做点其他的!然后偶然间发现 Ovear 很久之前用 SAE 做的图床。。。老的图片几乎全炸了,官方说是多重 GZIP ,然而并没有 GZIP ,以前也是好的,突然就炸了。

正片

一句话介绍

MoeTu (中文名 萌图床, 域名 moetu.org, 是一个基于 Chevereto 支持 HTTPS, 自带全球(非洲和澳大利亚不属于全球→_→) CDN 的自用型图床。

MoeTu

我也要成为欧洲人!

_(:з」∠)_JOJO,我不要当非洲人辣!

2016-07-19: 然而到目前为止还是非洲人。。今年BOOM了一堆东西心累。LL飞机卷也坠机了_(:з」∠)_

换皮肤辣

_(:з」∠)_ 自己的博客几年没换主题了,感觉都脱离现代了=。= 然后 @Eiko菊苣(没错就是左下角留版权那个Eiko菊苣)发了个主题给窝OAQ,然后窝就愉快的换上辣(不过貌似因为cdn的原因,还有点问题~)..

(诶?什么以前欠的博文?什么嘛我不知道啊哈哈哈哈哈

诶?最近不更新?_(:з」∠)_因为窝天天都踩坑,一天都可以写几十篇了,然后就没有然后辣

)好吧。。你们还是当失踪人口没回归吧→_→  来跟着我左手右手的一个慢动作

亚瑟王不懂人心

「无欲无求的王者就连一件装饰品都不如!」
Rider暴喝一声。言语中的凶悍,让他原本就庞大的身躯看起来更大了一倍。
「Saber,妳”为了理想而殉身”。原来如此,生前的妳应该是一个清廉又完美无暇的圣人,想必妳的形象一定是崇高而不可侵犯的吧。但是,有谁会对殉道这种充满苦难之路抱持憧憬,怀有梦想?
圣人就算可以抚慰人民,但是绝对无法领导人民。必须展现出具体的欲望,尊崇极限的荣华才能够带领人民、带领国家! 」
在杯中斟了一杯酒一饮而尽之后,Rider继续纠正道。
「所谓王者,就是比任何人都贪心,笑起来的时候比任何人都豪迈,愤怒的时候比任何人都凶暴,穷究人性之善与恶的人。正因为如此,臣子才会羡慕王者,受到王者的吸引。在每一个人民的心中才会燃起”我也要成为万人之上”的憧憬之火。」

碎碎念

四年前跟[新某]还有[傻逼千寻]他们一起看世界杯,四年后世界杯不看了,他们也不知道在做什么。

我却有了一个自己认为可以付出任何的人。

企业通常防火墙原理

大家好,还记得我是谁吗?对了对了对了,我就是你们的好朋友——去收快递回来的Ovear君~
要说起昨天的快递啊,那可是非常的赞~双十二买的Dr pepper划算超值!就是不知道为什么为什么会有一个伞的标志,Ovear记得以前没有的呀Σ(っ °Д °;)っ,就是这样的
228550
Ovear感觉喝起来味道有点奇怪呀~为什么有一股奇葩的味道=。=
好了好了,不扯了,接下来进入今天的正题-0-

-0-上班的时候,大家一定都知道老板购买了一个奇怪的设备~然后就可以监控咱们看了什么网页,看了什么东西,跟谁聊天,发了什么邮件。甚至能屏蔽我们访问一些网站,那么这是怎么做到的呢?

2014年1月21日全国DNS污染始末以及分析(作死)

丫丫丫~好久都没见到各位了,Ovear都有点想念各位了。于是今天就来码一篇=w=
群众:滚,你的反编译和海量查询系统呢
Ovear:QAQ Ovear刚刚考完试,也要让Ovear喘口气嘛。。那些文章很难写的,一不小心就被喷的要死
群众:吃翔翔,看你天天在某群里聊天,还说自己玩过头挂科了
Ovear:啊哈哈哈哈哈 今天下午出了个大新闻你们知道了
群众:啊?啥信息,喂别转移话题

=w=大概今天15:30的时候,Ovear正在调试新的服务器,结果发现肿么突然上不去了。。结果ping了以下,结果吓尿了,Ovear的域名都指向到[65.49.2.178]这个IP。Ovear第一反应就是,尼玛DNSPOD又被黑了! 为什么说DNSPOD被黑了呢,其实以前DNSPOD就出过一次类似的问题=。=,导致所有的域名都跪了,刚好Ovear这个域名还有测试的几个域名都是那里的,然后就到某交流群吐槽。结果管理员说他们的DNS被污染了,Ovear心想不会是全国DNS都被污染了吧。结果乌鸦嘴说中了。。还真的是全国劫持。

然后Ovear就很好奇,到底是怎么回事呢~有谁能做到这样的事情~于是就有了以下的分析和科普~
—————–以下内容为Ovear家电脑中病毒所致,跟本人无任何关系,谢绝跨省————————

balablabala说了这么久,肯定有同学问了,窝又不是学计算机的,(╯‵□′)╯︵┻━┻dns是什么玩意,跟我有什么关系!
那么DNS是什么呢,Ovear就来科普下┑( ̄Д  ̄)┍。
我们访问一般是通过域名[Domain]来访问的,咦DNS怎么也是D开头的,难道有关系?说对了!就是有关系:DNS的全称其实是[Domain Name System]翻译过来就是域名系统
在互联网中,是只存在IP的,IP其实就是一串数字,相当于你家里的门牌号,大家在网络中想找到你,必须通过这个,所以IP对于每个人来说是唯一的。但是第四代IP都是XXX.XXX.XXX.XXX这样的,多难记啊,谁会没事记住IP呢,更何况以后天那么长的IPV6,要记住不是得要人命!这时候一个聪明的科学家出来,我们给IP加一个别名,大家通过别名不就可以不记住这个IP,也可以知道这个IP了!于是就有了域名[Domain]这个东西.
当你访问www.ovear.info的时候
电脑的DNS解析系统就会自动问DNS服务器:尼知道www.ovear.info对应的IP地址是神马么?
DNS:窝帮你查查,奥,找到了,IP是[122.10.94.169].
Ovear的电脑:谢啦,再见
DNS:恩
对应现实就是,问知道张三的人:尼知道张三家在哪里么? 回答 在南山区 balabalabla。

当然这样解释还是不怎么恰当的,因为一个DNS服务器是不可能知道所有域名的地址的,因为这需要耗费极大地代价,所以这时候就出现了递归DNS和根DNS。(由于篇幅原因,Ovear就简单的说一下,其实还是有问题的。Ovear以后再写一篇文章详细阐述下DNS的工作原理,或者看[http://en.wikipedia.org/wiki/Domain_Name_System] QAQ)
根DNS是什么呢?大家想想,每个域名都有一个后缀,比如说ovear是[.info]后缀的。那么就有一个专门记录[.info]后缀的dns服务器,其他后缀也一样。这个DNS就是该域名的根DNS。
那么递归DNS呢?其实递归DNS就是一个代理人,是用来缓解[根DNS]压力的,如果大家都去问[根DNS],那[根DNS]不早就跪了。毕竟一个人(网站)的地址不是经常变的,所以就有了TTL这一说法,根据DNS的规定,在一个TTL时间呢,大家就认为你家里(域名所指向的IP)的地址是不会变的,所以代理人[递归DNS]在这个时间内,是只会问一次[根DNS]的,如果你第二次问他,他就会直接告诉你域名所指向的IP地址。这样就可以解决[根DNS]负载过大的问题啦。
顺便这一张图也可以很准确反映出来之前所说的~ =w=
figure_01

说了这么久,口水都干了,那么DNS到底跟这次事件有什么关系呢~
首先来看张图
QQ截图20140121154922
瓦特!肿么这么多域名都指向同一个IP了,这是什么情况0 0。其实这就是典型的[DNS污染]了。
我们知道互联网有两种协议,一种是TCP,一种则是UDP了(知道泥煤啊(╯‵□′)╯︵┻━┻都说我不是学计算机的了)。
TCP和UDP的主要差别就是:能不能保证传递信息的可靠性。UDP是不管消息是否到达了目标,通过什么途径的,他只管我发出去了就好,所以UDP比TCP快得多,但是可靠性没有TCP好。
QQ截图20140121180655
而DNS查询默认就是用的是UDP,那么就很好劫持啦。在UDP包任何传输的路途上,直接拦截,然后返回给接收端就行了。
啧啧,说道这大家也隐隐约约知道这次事件的问题了吧,范围如此之广的劫持,必须要在各个省市的主干网上进行,而能处理这么大数据,同时能控制这么多主干网的。。啧啧啧。。。没错!就是GFW了~至于GFW是什么,Ovear在这就不说了,不然可能大家都见不到Ovear了QAQ。
说道这里,Ovear就准备手动查一下,到底是不是所推测的GFW呢?于是拿到了这个图(From XiaoXin)
d2c0c26c8b00a17a01806b3f0c7b163b_r

与此同时运维也在各地的服务器上开始了跟踪查询,发现全国各地解析时间均为25ms左右。这时候结论就出来了。

这样就明显了,肯定是GFW做的了~~于是Ovear又好奇的查了下,这个IP是什么来头,为什么都要指向到这里去,于是Ovear发现了一些好玩的东西~(http://bgp.he.net/net/65.49.2.0/24#_dns)
QQ截图20140121181511
从侧面点出了此次事件的始作俑者。
那么某FW为什么要这么做呢?Ovear在这里做一个无责任的推测,最有可能的就是:某FW的员工本来是想屏蔽这个IP段的,但是呢一不小心点进去了DNS污染这个选项,然后又没写污染目标,于是就全局污染了啧啧啧~

但是有些童鞋会问了(╯‵□′)╯︵┻━┻为什么他们都说用8.8.8.8就没事了~
其实这样子说是不正确的,因为Ovear之前用的就是8.8.8.8,上面也说了DNS查询默认使用的UDP查询,所以不管你用什么,照样劫持不误。其实8.8.8.8没问题是因为污染事件已经基本结束导致的,那么为什么污染结束后其他国内DNS都不能用,而Goole的DNS确可以正常的使用~于是Ovear就找到了张有趣的图片~
QQ截图20140121154959
我先来解释下上面命令的用途吧~这个命令是用来直接向DNS服务器查询域名的~
其中的[-vc]参数是强制使用TCP来查询DNS服务器,这样就可以避免UDP污染的地图炮。

那么为什么污染结束后,DNS还会受到污染呢?其实原因很简单。Ovear之前说了,[递归DNS]是需要询问[根DNS]的,而默认的询问方式是采用的UDP,所以在国内的DNS服务器,自然就受到污染了。而之前Ovear也提到过TTL这件事~
在TTL周期内,根据协议[递归DNS]是直接吧结果缓存在自己那,是不会再去查询[根DNS]的,所以国内的DNS就把错误的结果缓存起来了~
而Google的DNS服务器基本都是在国外,所以查询的时候影响并不大,但是国内挺多域名使用DNSPOD啦,DNSLA的DNS,所以Google进国内查,还是会受到一定影响的。
因此,如果要完全避免这次的影响,有两个条件
1、你的域名的DNS必须是在国外
2、你查询的DNS必须在国外,而且如果在污染期需要通过TCP查询。

这样就可以避免这个问题了。

然后Ovear又手贱查了下这次的TTL,啧啧
QQ截图20140121183245
如果没有人员来手动干预,这次的事件还是要持续蛮久的~。

另外Ovear在这里奉劝一句媒体,不要听风就是风,听雨就是雨。不要一味的把责任推给无关的DNSPOD等厂商。自己要有判断力。
顺便引用江主席的一句话

媒体啊,还是要提高自己的知识水平,晓得不晓得啊?(装幽默)唉,我也替你们着急啊,真的

 

哎呀先不说了,我去开门收个快递~,双十二买的好东西终于到了~,回来继续说O(∩_∩)O~~

…………………………………………………………

密码保护:百度盘API

这是一篇受密码保护的文章,您需要提供访问密码: