如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN

如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN,第1张

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

问题一:

如何合理利用服务器数量,设计一个架构使公司网站在电信,网通都能快速访问?

答案:托管两台服务器 一电信 一网通

利用智能DNS解析 电信访问电信线路 网通访问网通线路

问题二:

哪个服务器应该装什么软件才能达到问题一的目的?

答案:其中一个装个服务器镜像软件就行

问题三:

如何配置服务器软件,达到安全、高效的网络环境?

答案:跑php+mysql 最好Linux+Apache 或者Unix+Apache

因为目前国内用Linux和Unix的少 所以相对安全

web服务器 Apache和 nginx都可以

总结:至强E5504双CPU/DDR3的12G内存/146G硬盘(SAS)*2+500G硬盘 这个配置+电信托管 完全可以应付网通和电信的访问速度了。。。

配置很好了 电信线路 可以看做双线的。。。

有不懂的 百度HI我

1.要不要SQL 在于你的网站源码的数据库 如果是SQL就要 如果是ACESS的就不用。

2.买内地的,网站需要备案,不备案就不能看,香港国外的则不用,可以省一些钱,不过国内访问速度上会有一定影响。

3.这个好的就贵,你有钱直接可以到万网上去买

4.一般网站都会够用,除非你的网站访问的人非常的多


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/79430.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-04
下一篇2023-03-04

发表评论

登录后才能评论

评论列表(0条)

    保存