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

如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN
如何用BIND, GeoIP, Nginx,&来创建你自己的高效的CDN网络?
CDN,意思是Content Distrubtion
Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡,全地域的概念可以是全国,也可以是全世界。由统一的DNS服务器进行地址转发,选择离用户最近的地区服务器进行负载均衡。本质上是从一个机房内的负载均衡扩展到了全世界范围内的负载均衡。同时可以将本地化的内容,由当地的服务器实现。做浏览器的地区自动选择。
比如在中国,被人为划分成两大区域,北方是网通,南方是电信。这两个网络之间互访是比较慢的。作为大型网站,一种解决办法是将全部服务器架设在双线或三线ISP处,由ISP来提供路由上的选择。这样做,线路的成本会比较高。另一种办法就是将服务器架设在两边,南方一台,北方一台,然后由服务器自己选择,如果IP在电信,就转发请求到南方的服务器,如果是网通就转发到北方的服务器。
再扩大范围,可以将美国来的请求交由美国服务器处理,这样也缩短了用户在路由上的等待时间。这就是内容分发网络。
而作为这个网络上的所有节点,都可以当成虚拟服务器来看待。至于在各地的服务器如何做负载均衡,可以由各节点之间完成。
准备工作如下:你需要下载如下软件以实现上述功能
接下来是编译和安装bind9和geoip
装好bind后我们来制作named.conf
照此办理,你也可以匹配到欧洲,非洲等等,然后来开始制作nginx和varnish
注意,以上内容是你要在主节点服务器上做的,主节点服务器只负责对DNS请求进行转发。
约定一下,我们将Bind服务器叫做动态节点服务器,Nginx+Varnish叫做边界服务器。
以下内容是副节点服务器需要做的,也就是实际在某个地区放置的服务器
并配置Nginx
以上我们用nginx只对静态文件进行缓存,将静态文件缓存在/var/www/cache文件夹下,如果你没有的话,需要创建这个文件夹。并且nginx监听的是8080端口,这是因为,我们需要用varnish来监听80端口进行动态文件的转发。这里实际上是用nginx做了一个静态文件的反向代理和缓存的服务器,而真正让用户能够看到网页和动态文件的反向代理是varnish,而静态和动态文件的分开存放,能将效率提升不少。
最后我们来配置varnish服务。
然后是varnish的选项
其他的配置内容可参看varnish的配置文章。
这样做的好处在于:
1.从根源上解决了DNS在轮询上的不确定性,能够做到在DNS上的快速响应。也避免了过去用Nginx+GeoIP时的负载高的问题。毕竟DNS的计算要比Nginx小多了。
2.降低大网站的服务器负载压力和运营成本,毕竟F5BigIP和双线路的价格和服务费都太高了。
3.易扩展性强,如某地区负载压力大,只需在该地区增加边界服务器组的web server即可完成,无需考虑跳转问题。
其他优点我再想想。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客访问: 3598145
博文数量: 2074
博客积分: 16831
博客等级: 上将
技术积分: 12404
注册时间:
认证徽章:
柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 网络与安全 09:32:16
如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN&&
15:44:40|&&分类:
CDN,意思是Content Distrubtion Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡,全地域的概念可以是全国,也可以是全世界。由统一的DNS服务器进行地址转发,选择离用户最近的地区服务器进行负载均衡。本质上是从一个机房内的负载均衡扩展到了全世界范围内的负载均衡。同时可以将本地化的内容,由当地的服务器实现。做浏览器的地区自动选择。
比如在中国,被人为划分成两大区域,北方是网通,南方是电信。这两个网络之间互访是比较慢的。作为大型网站,一种解决办法是将全部服务器架设在双线或三线ISP处,由ISP来提供路由上的选择。这样做,线路的成本会比较高。另一种办法就是将服务器架设在两边,南方一台,北方一台,然后由服务器自己选择,如果IP在电信,就转发请求到南方的服务器,如果是网通就转发到北方的服务器。
再扩大范围,可以将美国来的请求交由美国服务器处理,这样也缩短了用户在路由上的等待时间。这就是内容分发网络。
而作为这个网络上的所有节点,都可以当成虚拟服务器来看待。至于在各地的服务器如何做负载均衡,可以由各节点之间完成。
准备工作如下:你需要下载如下软件以实现上述功能
接下来是编译和安装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 install
# 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 install
装好bind后我们来制作named.conf
view “us” {
// 匹配北美的客户端 US & Canada
match-clients { country_US; country_CA; };
// Provide recursive service to internal clients only.
zone “cdn.xianglei.com” {
file “pri/xianglei-us.db”;
zone “.” IN {
file “named.ca”;
view “latin” {
// 匹配到南美国家
match-clients { country_AR; country_CL; country_BR; };
zone “cdn.xianglei.com” {
file “pri/xianglei-latin.db”;
zone “.” IN {
file “named.ca”;
照此办理,你也可以匹配到欧洲,非洲等等,然后来开始制作nginx和varnish
注意,以上内容是你要在主节点服务器上做的,主节点服务器只负责对DNS请求进行转发。
约定一下,我们将Bind服务器叫做动态节点服务器,Nginx+Varnish叫做边界服务器。
以下内容是副节点服务器需要做的,也就是实际在某个地区放置的服务器
# ./configure –prefix=/usr/local/nginx –with-http_realip_module
# make install
并配置Nginx
include mime.
default_type application/octet-
keepalive_timeout 65;
upstream dynamic_node {
server 1.1.1.1:80; # 1.1.1.1 是主DNS节点的IP地址
listen 8080;
server_name cdn.xianglei.
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_
proxy_pass http://dynamic_
proxy_store /var/www/cache$
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 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-
其他的配置内容可参看varnish的配置文章。
这样做的好处在于:
1.从根源上解决了DNS在轮询上的不确定性,能够做到在DNS上的快速响应。也避免了过去用Nginx+GeoIP时的负载高的问题。毕竟DNS的计算要比Nginx小多了。
2.降低大网站的服务器负载压力和运营成本,毕竟F5BigIP和双线路的价格和服务费都太高了。
3.易扩展性强,如某地区负载压力大,只需在该地区增加边界服务器组的web server即可完成,无需考虑跳转问题。
其他优点我再想想。
阅读(307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。下次自動登錄
現在的位置:
& 綜合 & 正文
如何用DNS+GeoIP+Nginx+Varnish做世界級的CDN
原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章
、作者信息和本聲明。否則將追究法律責任。
如何用BIND, GeoIP, Nginx, Varnish來創建你自己的高效的CDN網絡?
CDN,意思是Content Distrubtion Network,意思是內容分髮網絡,簡單的說,就是全地域範圍內的負載均衡,全地域的概念可以是全國,也可以是全世界。由統一的DNS服務器進行地址轉發,選擇離用戶最近的地區服務器進行負載均衡。本質上是從一個機房內的負載均衡擴展到了全世界範圍內的負載均衡。同時可以將本地化的內容,由當地的服務器實現。做瀏覽器的地區自動選擇。
比如在中國,被人為劃分成兩大區域,北方是網通,南方是電信。這兩個網絡之間互訪是比較慢的。作為大型網站,一種解決辦法是將全部服務器架設在雙線或三線ISP處,由ISP來提供路由上的選擇。這樣做,線路的成本會比較高。另一種辦法就是將服務器架設在兩邊,南方一台,北方一台,然後由服務器自己選擇,如果IP在電信,就轉發請求到南方的服務器,如果是網通就轉發到北方的服務器。
再擴大範圍,可以將美國來的請求交由美國服務器處理,這樣也縮短了用戶在路由上的等待時間。這就是內容分髮網絡。
而作為這個網絡上的所有節點,都可以當成虛擬服務器來看待。至於在各地的服務器如何做負載均衡,可以由各節點之間完成。
準備工作如下:你需要下載如下軟件以實現上述功能
接下來是編譯和安裝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 install
# 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 install
裝好bind後我們來製作named.conf
view “us” {
// 匹配北美的客戶端 US & Canada
match-clients { country_US; country_CA; };
// Provide recursive service to internal clients only.
zone “cdn.xianglei.com” {
file “pri/xianglei-us.db”;
zone “.” IN {
file “named.ca”;
view “latin” {
// 匹配到南美國家
match-clients { country_AR; country_CL; country_BR; };
zone “cdn.xianglei.com” {
file “pri/xianglei-latin.db”;
zone “.” IN {
file “named.ca”;
照此辦理,你也可以匹配到歐洲,非洲等等,然後來開始製作nginx和varnish
注意,以上內容是你要在主節點服務器上做的,主節點服務器只負責對DNS請求進行轉發。
約定一下,我們將Bind服務器叫做動態節點服務器,Nginx+Varnish叫做邊界服務器。
以下內容是副節點服務器需要做的,也就是實際在某個地區放置的服務器
# ./configure –prefix=/usr/local/nginx –with-http_realip_module
# make install
並配置Nginx
include mime.
default_type application/octet-
keepalive_timeout 65;
upstream dynamic_node {
server 1.1.1.1:80; # 1.1.1.1 是主DNS節點的IP地址
listen 8080;
server_name cdn.xianglei.
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_proxy_pass http://dynamic_
proxy_store /var/www/cache$
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 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-
其他的配置內容可參看varnish的配置文章。
這樣做的好處在於:
1.從根源上解決了DNS在輪詢上的不確定性,能夠做到在DNS上的快速響應。也避免了過去用Nginx+GeoIP時的負載高的問題。畢竟DNS的計算要比Nginx小多了。
2.降低大網站的服務器負載壓力和運營成本,畢竟F5BigIP和雙線路的價格和服務費都太高了。
3.易擴展性強,如某地區負載壓力大,只需在該地區增加邊界服務器組的web server即可完成,無需考慮跳轉問題。
其他優點我再想想。
【上篇】【下篇】Access denied | www.manong5.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.manong5.com) has banned your access based on your browser's signature (3ff5ce-ua98).}

我要回帖

更多关于 康得新 财务 向世界级 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信