设为首页 收藏本站
查看: 2497|回复: 0

[经验分享] 如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-4 10:56:58 | 显示全部楼层 |阅读模式
如何用BIND, GeoIP, Nginx, Varnish来创建你自己的高效的CDN网络?
CDN,意思是Content Distrubtion Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡,全地域的概念可以是全国,也可以是全世界。由统一的DNS服务器进行地址转发,选择离用户最近的地区服务器进行负载均衡。本质上是从一个机房内的负载均衡扩展到了全世界范围内的负载均衡。同时可以将本地化的内容,由当地的服务器实现。做浏览器的地区自动选择。
比如在中国,被人为划分成两大区域,北方是网通,南方是电信。这两个网络之间互访是比较慢的。作为大型网站,一种解决办法是将全部服务器架设在双线或三线ISP处,由ISP来提供路由上的选择。这样做,线路的成本会比较高。另一种办法就是将服务器架设在两边,南方一台,北方一台,然后由服务器自己选择,如果IP在电信,就转发请求到南方的服务器,如果是网通就转发到北方的服务器。
再扩大范围,可以将美国来的请求交由美国服务器处理,这样也缩短了用户在路由上的等待时间。这就是内容分发网络。
而作为这个网络上的所有节点,都可以当成虚拟服务器来看待。至于在各地的服务器如何做负载均衡,可以由各节点之间完成。
准备工作如下:你需要下载如下软件以实现上述功能
Nginx,BIND,GeoIP,Varnish
接下来是编译和安装bind9和geoip
  • # tar -xzvf bind-9.2.4.tar.gz
  • # tar -xzvf GeoIP-1.4.6.tar.gz
  • # cd GeoIP-1.4.6
  • # ./configure –prefix=/usr/local/geoip
  • # make
  • # make install
  • # cd ..
  • # patch -p0 < bind-9.2.4-geodns-patch/patch.diff //给bind9打补丁,让bind9直接支持geoip库
  • # cd bind-9.2.4
  • # CFLAGS=”-I/usr/local/geoip/include” LDFLAGS=”-L/usr/local/geoip/lib -lGeoIP” ./configure –prefix=/usr/local/bind
  • # make
  • # make install

装好bind后我们来制作named.conf
  • view “us” {
  • // 匹配北美的客户端 US & Canada
  • match-clients { country_US; country_CA; };
  • // Provide recursive service to internal clients only.
  • recursion no;
  • zone “cdn.xianglei.com” {
  • type master;
  • file “pri/xianglei-us.db”;
  • };
  • zone “.” IN {
  • type hint;
  • file “named.ca”;
  • };
  • };
  • view “latin” {
  • // 匹配到南美国家
  • match-clients { country_AR; country_CL; country_BR; };
  • recursion no;
  • zone “cdn.xianglei.com” {
  • type master;
  • file “pri/xianglei-latin.db”;
  • };
  • zone “.” IN {
  • type hint;
  • file “named.ca”;
  • };
  • };

照此办理,你也可以匹配到欧洲,非洲等等,然后来开始制作nginx和varnish
注意,以上内容是你要在主节点服务器上做的,主节点服务器只负责对DNS请求进行转发。
约定一下,我们将Bind服务器叫做动态节点服务器,Nginx+Varnish叫做边界服务器。
以下内容是副节点服务器需要做的,也就是实际在某个地区放置的服务器
  • # ./configure –prefix=/usr/local/nginx –with-http_realip_module
  • # make
  • # make install

并配置Nginx
  • http {
  • include mime.types;
  • default_type application/octet-stream;
  • sendfile on;
  • keepalive_timeout 65;
  • upstream dynamic_node {
  • server 1.1.1.1:80; # 1.1.1.1 是主DNS节点的IP地址
  • }
  • server {
  • listen 8080;
  • server_name cdn.xianglei.net;
  • location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$ {
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_pass http://dynamic_node;
  • proxy_store /var/www/cache$uri;
  • proxy_store_access user:rw group:rw all:r;
  • }

以上我们用nginx只对静态文件进行缓存,将静态文件缓存在/var/www/cache文件夹下,如果你没有的话,需要创建这个文件夹。并且nginx监听的是8080端口,这是因为,我们需要用varnish来监听80端口进行动态文件的转发。这里实际上是用nginx做了一个静态文件的反向代理和缓存的服务器,而真正让用户能够看到网页和动态文件的反向代理是varnish,而静态和动态文件的分开存放,能将效率提升不少。
最后我们来配置varnish服务。
  • # tar -xzvf varnish-2.1.2.tar.gz
  • # ./configure –prefix=/usr/local/varnish
  • # make
  • # make install

然后是varnish的选项
  • backend default {
  • .host = “127.0.0.1″;
  • .port = “8080″;
  • }
  • sub vcl_recv {
  • if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
  • return (lookup);
  • }
  • }
  • sub vcl_fetch {
  • if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
  • unset obj.http.set-cookie;
  • }
  • }

其他的配置内容可参看varnish的配置文章。
总结:
这样做的好处在于:
1.从根源上解决了DNS在轮询上的不确定性,能够做到在DNS上的快速响应。也避免了过去用Nginx+GeoIP时的负载高的问题。毕竟DNS的计算要比Nginx小多了。
2.降低大网站的服务器负载压力和运营成本,毕竟F5BigIP和双线路的价格和服务费都太高了。
3.易扩展性强,如某地区负载压力大,只需在该地区增加边界服务器组的web server即可完成,无需考虑跳转问题。
其他优点我再想想。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-24423-1-1.html 上篇帖子: varnish流程图 下篇帖子: eAccelerator 配置参数详解 如何
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表