如何用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即可完成,无需考虑跳转问题。

其他优点我再想想。

转载于:https://blog.51cto.com/tianshili/1640076

如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN相关推荐

  1. 刚进来的小伙伴说Nginx只能做负载均衡,还是太年轻了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文只针对 Nginx 在不加载第三方模块的情况能处理哪些 ...

  2. Nginx可以做什么?看完这篇你就懂了

    前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 N ...

  3. Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载

    相必大家在看加快网站响应速度方面的文章时,都提过这么一条:动静分离.那怎样实现动静分离呢,这里笔者就亲自搭建相关服务实现动静分离. 动静分离是一种架构,就是把静态文件,比如JS.CSS.图片甚至有些静 ...

  4. Graylog收集nginx日志做地图事态感知

    文章目录 这个东西有什么用呢 搜集日志的过程如下图 开始部署 在客户端安装 Sidecar 在客户端安装 Filebeat 在Server服务端添加Sidecar 通过Nginx日志做地图标识 这个东 ...

  5. 代理服务器Nginx/Varnish/HAProxy对比

    今天给大家带来的是Nginx/Varnish/HAProxy这三款开源代理服务器软件的区别,以及什么样的场景使用哪款软件:哪个软件能够支撑高可用,高并发,还要好维护,运维和网络管理员如何从这些方案中选 ...

  6. 使用Nginx+Memcache做页面缓存

    前言 官方商城改版之后,为了提升动态页面的访问速度,对商城的一些页面进行了缓存,使其在一定时间之内避免了重复的查询和编译. 原理 主要使用了 nginx 的 memcached_module 模块,直 ...

  7. nginx可以用来做什么

    nginx可以用来做什么 1)反向代理 2)动静分离 3)负载均衡 反向代理 反向代理应该是Nginx做的最多的一件事了.反向代理(Reverse Proxy)方式是指以代理服务器来接受interne ...

  8. Nginx到底能干嘛?!Nginx是做什么用的?通俗易懂,前端必看!

    一. Nginx介绍 1. Nginx到底是什么,干什么用? Nginx是一个 轻量级/高性能的反向代理Web服务器,它是由C语言写的,所以速度非常快.性能非常优秀.它的主要功能就是反向代理.负载均衡 ...

  9. 内外网域名统一(通过内网DNS及nginx端口转发)

    要实现内外网同时访问一个域名,比如:oa.xxx.com:8999,内外网同时都能通过此网址访问: 一.设置dns,通过DNS服务器配置向导添加oa.xxx.xom区域,添加完毕后,新建一个空主机,映 ...

最新文章

  1. 你确实应该学习并使用的 10 个 C# 特性
  2. 使用FileUpload控件上传前预览图片
  3. bobo老师机器学习笔记1.1 - 什么是机器学习
  4. 华为手机输入键盘声音_华为手机键盘隐藏7个秘密,你只用来打电话?来一起解锁新玩法...
  5. log4j配置文件及nutch中的日志配置
  6. python 图片识别_python识别图片文字
  7. Javascript--File对象
  8. iis无法读取配置文件_SpringBoot 有很多读取配置文件的方法,你知道几个? 静态方法读取呢?...
  9. 上海交大计算机网络课程作业,上海交大计算机网络第四次作业详解.doc
  10. [技术收藏]关于IOPS
  11. 符号扩展和无符号扩展
  12. 小米推出物联网软件平台Xiaomi Vela;库克被指隐瞒iPhone中国需求下滑;Ubuntu Touch新版发布|极客头条
  13. 无法安装64位版本的Office,因为在您的PC上找到了以下32位程序的解决办法
  14. c语言创建线程代码,如何用C语言实现多线程
  15. 【Codeforces gym 102388】SUFE ICPC Team Formation Test,签到题BDG
  16. cf. Lengthening Sticks 组合数学
  17. 如何把照片kb缩小?详细步骤
  18. UVA - 10106 Product
  19. android,java知识点总结 (二)
  20. 宝塔面板 安装与使用教程

热门文章

  1. 打印机扫描后旋转纸张_档案扫描好帮手,富士通ix1500无线双面高速扫描仪评测...
  2. php的反射作用是什么意思,php反射的作用是什么
  3. Java反射(详述版)
  4. MyBatis的使用
  5. plc和pc串口通讯接线_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...
  6. swift x输入流_SwiftUI 探索 - 状态和数据流
  7. 1小时学会:最简单的iOS直播推流(番外)运行不起AWLive的demo的同学请看这里
  8. JS计算两个时间相差多久,相差年,月,日,小时,分钟
  9. 微信小程序模块化开发 include与模板开发 template
  10. swift 数组 filter reduce sort 等方法