用DNSPod和Squid打造自己的CDN
奶罩学堂系列文章
Copyright 2007 Sam Wu, wuhongsheng.com. All rights reserved.
前言
本篇教程是顺应大家的要求而写。教程内大部分都是奶罩在为VeryCD等大型网站构建CDN时所累积的经验。在一些概念方面可能会有一些错漏,希望大家指正。
本教程面对的对象是个人站长,所以各方面会力求傻瓜化,让大家都能看懂。当然,前提是需要你要有一颗好学的心,还有坚韧的毅力。
另外一方面,本篇文章基本不会涉及到Windows的内容,整套系统将会是架构在CentOS Linux 5上。别问我为什么不是Windows,因为Windows只能拿一个字形容:烂。不喜欢Linux,或者认为Linux学习起来有困难的朋友,可以到此打住。
可能有人要问,为什么是Linux,而不是FreeBSD?因为FreeBSD不管从系统的优化配置,还是文件系统的性能,都不合适初学者。
先前说过,本篇文章针对的是没有多少技术基础的个人站长,所以文章内会有Linux的安装、基本操作等一些东西教给你,让你学得简单,时间花得有价值。
再罗嗦一下,在接下来的时间内你将要面对一个黑漆漆的,全是英文的屏幕,请做好心理准备。
注意:本篇教程将*不会*涉及到以下内容:
1.动态内容(比如BBS)
2.大文件(比如软件下载站的软件)
第 1 章 CDN和智能DNS
1.什么是CDN
简单来说,CDN就是能让你的网站访问起来更加快的东西。例如网通用户访问了你在网通的CDN服务器上面某个文件,CDN系统就会判断这个文件是否被请求过,如果被请求过,在没有失效的情况下,就会从系统的缓存里面读取这个文件并返回给用户。如果这个文件没有被请求过,那么CDN会自动从你的主服务器上面获取这个文件,然后缓存到CDN系统内,再给用户返回。
看到这里,聪明的朋友就会问:如果网通的CDN服务器,访问我在电信的主服务器速度很慢,那么是不是用户第一次请求这个文件的时候会很慢?嘿嘿,恭喜你,的确是这样。并且,在文件没有完全缓存到CDN上面的时候,所有访问这个文件的用户都会出现错误,比如网页打开不完整,文件下载到一半等。但只要你的网站访问量足够大,这个影响对用户来说是微不足道的。
然后还有朋友会问,为什么商业的CDN不存在这个问题?因为,商业的CDN有自己租用的线路,自己走路由。这就是商业CDN卖得如此之贵的原因。当然,如何走这个路由,搭建这么一个大型的CDN系统,不在本文的讨论范围以内。
2.什么是智能DNS,什么是DNSPod
智能DNS的原理很简单:在用户解析一个域名的时候,判断一下用户的IP,然后跟DNS服务器内部的IP表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址。
DNSPod是奶罩同学旗下的网站,提供免费的智能DNS服务。你只需要把你域名的DNS从原来的注册商改为DNSPod,马上就可以享用这个服务了。
注意了:DNSPod只提供域名的智能解析服务,不提供域名也不提供服务器,千万不要以为把你的域名转到DNSPod就能成为双线了。
第 2 章 前期准备
要继续后面的步骤,你必须要准备以下东西:
域名一个
服务器两台,电信网通各一台,一般的P4即可,内存2G以上
空白DVD R+光盘一张(或者CD-R 6张)
DVD刻录机一个(或者CD RW刻录机一个)
然后,你还需要去下载CentOS的ISO镜像
随便在下面的镜像地址挑一个,暂时没有国内的,建议挂一个迅雷慢慢下
http://ftp.ncnu.edu.tw/Linux/CentOS/5.0/isos/i386/
http://ftp.cse.yzu.edu.tw/pub/CentOS/5.0/isos/i386/
http://ftp.cs.pu.edu.tw/Linux/CentOS/5.0/isos/i386/
http://ftp.tcc.edu.tw/Linux/CentOS/5.0/isos/i386/
http://mirror.mirr4u.com/centos/5.0/isos/i386/
http://mirror.tini4u.net/centos/5.0/isos/i386/
http://mirror.averse.net/centos/5.0/isos/i386/
打开上面的网址后,你可以发现类似下面的文件名
CentOS-5.0-i386-bin-1of6.iso
…
CentOS-5.0-i386-bin-6of6.iso
这些是CD镜像,一共有6个,下载刻盘比较浪费资源,所以我建议下载下面这个DVD镜像
CentOS-5.0-i386-bin-DVD.iso
废话不多说,下载回来后刻盘即可。
之后,为资源做一个安排,所以下面将会做一个假设:
假设域名为naizhao.com
假设两台服务器,电信的服务器为A,网通的服务器为B
假设A服务器为内容服务器,B服务器为CDN服务器,B服务器所有需要的内容均从A服务器取得
假设A服务器的IP是1.1.1.1,B服务器的IP是2.2.2.2
OK,到这里后我们所需要的东西基本准备好了。ISO可能还没有下载好,不急,慢慢挂着,我们先来把域名的DNS设置好。
06年底,抛弃网站,转行买基金,赚了一大笔。
07年初,感觉基金赚得太少,于是纷纷到证券市场开户,改行炒股,又继续发了一笔
5.30,股灾,一年以来的钱白赚了,大家为国家的肉类市场献上自己的一份力量,有效的抑制了肉类价格过高的情况。
300%!!!疯狂了,大家都疯狂了,钾肥能让人1万变3万,QQ变骏捷,骏捷变帕萨特,帕萨特变BMW!!权证之疯,都疯了。割掉的肉回来了,还狠狠的翻了几翻,老子TMD就是一个股神!!
没多久,这些权证就该行权了。别人也不傻,没人接棒,到时候手头拿的东西将会一文不值。事物的进化,总有一批人要被牺牲。
为这批将要死掉的人默哀。
自己对C和C++一直是迷迷糊糊的,今天看到一本好书,Become An Xcoder(简体中文版本),看书名就知道了,教你如何成为一个Mac下面的程序开发人员。
里面说到了指针的问题,看了半天,不明白指针有多大的用处,感觉是不是一个重复的功能。后来看了演示的代码,大概明白了用处。
void increment(int *y) { *y = *y + 1; } int x = 4; increment(&x); // now x is equal to 5
如果按照一般情况,我们都会在function里面(increment)放置一个return xxx,把结果传回,然后调用function的时候再取到这个值使用。
但用了指针后,跑一次function后就可以直接把值(x)更新了。也就是说,跑一次increment(&x); 后,就可以直接把x的值从4更新为5,不需要重新为x赋值。
默认情况下,svn的文件commit后都会失去属性。
有时候一些文件需要带有可执行属性(比如bash shell script),只需要使用svn ps设置
svn:executable
即可。
网站:http://www.DNSPod.com
类型:免费提供双线域名解析服务的网站。
站长:吴洪声,网名声仔,1985年生,广东湛江人。小学二年级时便接触电脑,制作和维护过多个网站。目前使用DNSPod解析的域名超过5000个。
IT界有句笑谈:世界上最远的距离,不是南极和北极,而是电信和网通之间的距离。唯一的解决方法是使用双线服务器,但是这样又会让用户面临选择服务器的麻烦,许多大网站深受困扰。这时DNSPod系统出现了,它提供免费的网通电信智能DNS,支持双线域名解析。开发这个系统的声仔,今年才22岁。
年少轻狂,差点当黑客
声仔家里保留着一份旧报纸,那是1998年9月14日的《电脑报》,上面有一篇《169上的免费服务》,声仔看了这篇文章,注册了自己的第一个电子邮箱,并将报纸保存至今。那一年,声仔才13岁。
当时上网的人大都在聊天室,声仔也不例外,他看到聊天室有人发炸弹,有人可以发大字小字、改变别人说话的颜色、还能冒充别人说话、甚至把整个聊天室都关掉,觉得很新奇。后来他才知道,这些不过是简单的Javascript代码而已。
当稍微开始懂网络以后,声仔对“黑客”产生了兴趣。当年的黑客大部分都是研究技术的,声仔也喜欢学习技术。但更多的时候,他还是喜欢往别人的机器上面种个木马。声仔说,他喜欢看见别人对着屏幕上面乱动的鼠标时一副惊慌失措的样子。
在2001年的中美黑客大战后,小小年纪的声仔突然“感到身心疲惫”,于是不打算继续做“黑客”。同年,他放弃了读高中的机会,选择了一所不知名的中专——湛江财贸学校。
入侵学校网站,因祸得福
刚上中专时,因为对学校的一些管理制度不满。声仔入侵了学校的网站,把网页改得一塌糊涂。那天下午刚好是电脑课,老师打开学校网站的时候脸唰一下就白了……后来,声仔被叫到了办公室。
很多事情往往出人意料。陈老师并没有指责声仔,而是问他学了多久电脑、以及对学校的网站有什么建议。声仔一一回答后,当场还把学校服务器的漏洞补上了。后来陈老师经常找声仔帮忙处理电脑方面的问题,还让他负责管理学校的机房和网络中心。
陈老师看到声仔对做网站有莫大的热情,觉得是一个可造之才,于是拿出自己并不高的工资,托管了一台服务器,给声仔用来做网站。也就是在那个时候,声仔开始做真正意义上的网站。
几经周折,关闭所有网站
计划总是赶不上变化,由于家境不好,家中还有个妹妹在读书,为了减轻家庭的压力,在中专二年级的时候,声仔离开了校园。最开始他整天窝在家里做网站。这段时间,他做了不少网站,其中在彩铃广告和Google Adsense中赚了不少钱,把他和妹妹几年的学费都赚回来了。最后竟然还给家里买了套房子。
可是现实总是残酷的,由于作弊站长太多,Google广告联盟开始大批量封账号,很多账号被关闭。同时,由于中国移动对SP开展了二次确认的政策,图铃广告也不太好做了。
声仔预感到个人网站将会死掉很大一批,所以一狠心,把自己所有的网站都关闭了。
偶然之间,DNSPod诞生
2005年10月,声仔到了北京的黑马联盟,做技术方面的工作。那段时间,他各方面的能力都得到了锻炼。
黑马联盟的广告基本都是Flash,而服务器是电信线路,网通用户访问很慢。因为普通的DNS并不能实现智能解析,所以虽然在网通也托管了服务器,但是根本没法利用上。声仔非常想解决这个问题。几经研究,一个可以实现智能解析的DNS服务器搭建了起来。
这个系统最初没有任何的管理界面,修改解析等操作也需要到服务器上进行,声仔也没有想到将它发展下去。
一天,VeryCD使用的商用CDN出了问题,网页内容被恶意篡改,大量用户受到影响。VeryCD的站长Dash感觉到商用的CDN除了成本太高外,数据的安全性也得不到保障,产生了自己搭建CDN系统的想法。因为CDN系统最基本的部分就是域名的智能解析,于是,他想到了声仔DNS解析系统。
于是,声仔花了一周时间,做出前台界面,这就是DNSPod的雏形。因为站长站的阿飞、51.la的阿江等很多大站长都对这个系统感兴趣,得到鼓励的声仔就坚持继续完善它,就这样,DNSPod诞生了。
意料之外,网站飞速发展
DNSPod当前主要的开发人员还有李皓和卢亨祺两人,都是声仔的铁哥们。声仔说,“大家都有一个共同梦想,就是开拓一番新天地,因此走到了一起。”
卢亨祺精通css+div的设计,负责网站的版面设计。李皓精通PHP开发和数据挖掘,主要负责网站的API部分和数据分析,而声仔主要做整体框架的开发和程序编写以及系统日常维护。这样的组合非常清晰,大家合作也很愉快。
因为免费,而且还有VeryCD、crsky、51.la、ppstream、btbbt等一大批知名网站使用后良好评价,DNSPod发展很快。在网站注册人数到100个的时候,声仔发了篇文章留念。可是没过多久,注册人数就变成1000人了。DNS系统的请求量也从以前的每天几十万次一路飙升,到现在每天的请求量过亿。
DNSPod发展的速度远远超过了声仔的预期,现在他和伙伴们经常在想的问题,就是如何做得更好,更稳定。
情理之中,开发增值服务
谈到未来的发展,声仔准备在免费用户的基础上提供专业的VIP服务。比如一些网站没有专门的技术人员,可以付费获得技术支持;对于一些请求量多的大型网站,开设专门的服务器,这样既保证了免费服务的稳定,又为收费客户赢得了实惠。通过按照域名的解析请求次数来收费,相对来说会更加合理。
其实,现在有很多DNSPod的用户已经不满足于现有的服务。对于需求量大或者有特殊需求的客户,可以单独的开发某些特定功能,当然这都是收费的服务。
除此以外,一套故障监测转移的功能也已经开发完成。相信很多站长都会有过这样的经历:在不方便上网的时候,服务器突然就出现了问题,然后就是手忙脚乱的找地方上网,把故障解决。有了故障监测转移的功能后,程序会自动监测服务器的状态,在服务器出问题的时候会主动通过短信等方式进行通知,然后程序会自动把故障服务器的IP从DNS系统里面剔除,保证网站的正常访问。
另外,声仔还想开通免费二级域名系统,用户可以把自己的域名拿出来免费提供给别人申请。这又是一个让人期待的实用功能。声仔说——连这样的商业机密都透露了,谁叫我是《电脑报》读者呢……
站长访谈:
记者:能介绍一下DNSPod双线的工作原理吗?
声仔:大家好,智能解析的原理有很多种,最常用的一种也是我们现在正在使用的就是内部处理一个IP表,然后在用户向DNS服务器请求解析的时候判断用户所处方位和所使用的线路,之后把智能匹配出来的结果返回给用户。
记者:那双线解析服务主要可以解决那些问题呢?
声仔:为了提升网站的访问速度,站长一般都会使用双线路服务器,或者采用电信网通互为镜像的方法。不过这样一来,每条线路都有自己的独立域名,用户需要选择跟自己线路相符的镜像站后才能正常访问网站。对于用户来说这一模式是非常不友好的。DNSPod能够让使用双线路或拥有多镜像的网站实现智能DNS解析,让用户仅用单域名即可访问到最快速的镜像。
记者:你们提供免费服务多久了?
声仔:DNSPod从出来到现在已经提供免费服务有一年多了。我们还会继续提供下去。
记者:你们为什么要免费呢?免费了你们怎么生存?
声仔:太多人关心这个问题了。经常有用户会过来问我:你们为什么要免费?我们一般会回答:为什么不能免费?呵呵,其实真正的原因是,目前我们大部分的服务器和营运资金都是VeryCD赞助的,也有几台服务器是会员主动赞助的。既然别人都那么无私,为什么我们就不能也无私?
记者:一年多以来,你们最想感谢谁?
声仔:我们最想感谢的就是那些一直以来默默支持我们的用户。我记得去年底我们遭受了最猛烈的一次攻击,那时候我已经发了公告建议大家把域名转回原注册商去,但还是有很多用户坚持要留下来陪我们共度难关。那天晚上,我喝醉了,哭了。
两天来,一直在修改DNSPod的程序,总算完成了大部分的要求。
URL转发的服务器们一直被一些部门盯着,刚开始的时候还好,删除非法网站的转发就没事了。但后来可能这些部门认为这样来来去去很麻烦,很干脆的在骨干路由上把IP封掉。
5.16号,收到主机托管商的邮件,让删除几个网站的转发,并把相关信息发回网监处,我很配合的整理了资料一股脑发了过去,并且修改了程序,收集更多相关信息,以准备不时之需。之后,相安无事。
6.1号,再收到邮件。这次注册的非法用户很精明,用了多层代理并且所有信息都是虚假的。我承认这点真的监管不足,我太过于相信我的用户。就算后来准备的很多log都没用。网监叔叔明说:如果无法提供用户的名字和身份证信息,那么责任就要你来承担。于是,服务器再次给抱走。整顿。
很没办法,上头压力下来,我无能为力。
所以,从今天开始,所有DNSPod新注册的用户都必须填写真实姓名和真实身份证号码,老用户在登录的时候也需要补充这方面的信息。对于使用虚假信息注册的一律不客气,删!
希望大家能理解。游戏规则是要大家一起来遵守的。
判断身份证有效性的
function isIdCard($number) { //加权因子 $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //校验码串 $ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); //按顺序循环处理前17位 for ($i = 0;$i < 17;$i++) { //提取前17位的其中一位,并将变量类型转为实数 $b = (int) $number{$i}; //提取相应的加权因子 $w = $wi[$i]; //把从身份证号码中提取的一位数字和加权因子相乘,并累加 $sigma += $b * $w; } //计算序号 $snumber = $sigma % 11; //按照序号从校验码串中提取相应的字符。 $check_number = $ai[$snumber]; if ($number{17} == $check_number) { return true; } else { return false; } }
判断中文姓名(UTF-8,2-4位)
function isChineseName($name) if (preg_match('/^([\xe4-\xe9][\x80-\xbf]{2}){2,4}$/', $name)) { return true; } else { return false; } }
使用方法:
if (!isChineseName('奶罩')) { echo "非中文名字"; } else { echo "中文名字"; } if (!isIdCard('440823100000000000')) { echo "身份证号码不合法"; } else { echo "身份证号码正确"; }
在一个朋友的网站上面发现了这点.
也就是说,广告代码放在文章的不同位置,出现的广告都不一样.蜘蛛会分析广告前后文然后出现最匹配的广告.
大家就别费心思做title了.