`
brucectl
  • 浏览: 177877 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

其他优点我再想想。
分享到:
评论

相关推荐

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

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

    nginx+geoip合集.zip

    nginx+GeoIP,域名根据地域解析到对应IP,所用到的所有资源,全部的。

    nginx1.27.1+lua+geoip2+fancyindex+boringssl+http3

    resty-core-0.1.29.tar.gz lua-resty-lrucache-0.14.tar.gz luajit2-2.1-20240815.tar.gz nginx-1.27.1.tar.gz ngx-fancyindex-0.5.2.tar ngx_http_geoip2_module-3.4.tar.gz ngx_...

    Linux源码安装MySQL+MySQL主从+Nginx+Nginx负载均衡+redis+php+phpredis+tomcat

    1. 在Nginx配置文件中添加负载均衡配置,例如使用轮询策略: ```nginx upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } location / { ...

    Nginx和GeoIP模块读取IP所在的地域信息方法

    如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下 注意:如果nginx不是yum安装的而是源码编译安装的需要从新安装编译一次nginx加上此模块,然后就不用手动加入此模块了。 手动加入模块 在nginx.conf...

    nginx-geoip2:nginx geoip geoip2 模块,集成最新的免费 maxmind geoip mmdb 数据

    make && make install$ echo /usr/local/lib &gt;&gt; /etc/ld.so.conf.d/local.conf $ ldconfig下载 geoip2 数据 $ git clone https://github.com/ar414-com/nginx-geoip2$ cd nginx-geoip2$ tar -zxvf GeoLite2-C

    ngx_http_geoip2_module:使用ngx_http_geoip2_module编译Nginx 1.15.0并下载GeoIP 2数据库

    带有ngx_http_geoip2_module和GeoIP2数据库的Nginx 1.15.0 这是用于使用ngx_http_geoip2_module编译Nginx 1.15.0并将Nginx安装到服务器中的脚本。 此外,该脚本还有助于下载Maxmind GeoIP2国家/地区数据库的免费版本...

    GeoLite2-City.mmdb

    nginx+GeoIP,域名根据地域解析到对应IP,所用到的资源

    在nginx中使用geoip做区域限制的方法

    通过IP区别国内或国外,从而跳转到不同的页面,最终用nginx的第三方module:geoip来实现,这就不说它的优势了,网上很多解释,下面看怎么配置 我的系统中是配置了nignx.repo的,我直接用yum来安装了geoip模块,没有用...

    GeoIP.dat.gz + GeoLiteCity.dat.gz 20200206.zip

    安装和配置Nginx的GeoIP模块需要先下载并解压GeoIP和GeoLiteCity数据库,然后配置Nginx的配置文件,指定数据库路径。 总的来说,GeoIP.dat.gz和GeoLiteCity.dat.gz是网络服务中非常重要的工具,它们为开发者提供了...

    掌握地理定位:如何在 Nginx 中配置 GeoIP 模块

    ### 掌握地理定位:如何在 Nginx 中配置 GeoIP 模块 #### Nginx 简介与特点 Nginx 是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。它由俄罗斯的程序员伊戈尔·赛索耶夫(Igor ...

    GeoIP_1.4.8.tar.gz 地理信息系统,资源包含geoIP_1.4.8的所有资源。

    对于Nginx或Tengine,你需要配置适当的模块,并确保GeoIP数据文件可用,以便服务器能够正确解析和使用IP地址信息。 总的来说,GeoIP_1.4.8是开发人员和系统管理员在实现基于IP地址的地理位置服务时的重要工具。通过...

    GeoLite2-ASN.mmdb

    nginx+GeoIP,域名根据地域解析到对应IP,所用到的资源

    nginx-1.9.0.tar

    在Nginx配置文件中,可以使用`rewrite`指令实现URL的转换。 **反向代理(Reverse Proxy)** 作为反向代理,Nginx接收来自客户端的HTTP请求,然后将这些请求转发到后端服务器,返回结果给客户端。这种方式可以隐藏...

    GeoIP.dat.gz和GeoLiteCity.dat.gz.rar

    - 在Nginx中使用GeoIP功能,首先需要安装GeoIP模块和对应的数据库。在Linux系统中,这通常涉及编译Nginx时添加模块,然后将解压后的GeoIP数据库文件移动到指定目录。 - 配置Nginx时,需要在server或location块中...

    geoip2 ip库;geoip国家库;2020.11版

    4. 配置Nginx服务器,使用GeoIP模块来查询IP地址并根据结果进行相应的操作,如设置变量、重定向、限制访问等。 5. 重启Nginx以应用新的配置。 通过这样的配置,网站可以实现更智能的服务,例如根据用户所在国家显示...

    GeoIP.dat__GeoLitecity.rar

    标题中的"GeoIP.dat__GeoLitecity.rar"和描述中的内容暗示了我们讨论的核心是Nginx的GeoIP模块以及相关的数据库文件。 GeoIP模块是Nginx的一个第三方模块,用于获取访问者IP地址的地理位置信息。这个功能对于网站...

    Nginx1.22.0版本Linux已编译可直接使用

    然而,这个“Nginx1.22.0 版本 Linux 已编译可直接使用”的压缩包提供了预编译的二进制文件,简化了部署过程,使得用户可以直接在 Linux 系统上运行,无需经历复杂的编译步骤。 Nginx 的主要功能包括: 1. **Web ...

    Complete-NGINX-Cookbook-2019-中文翻译1

    在 NGINX 中,可以使用 GeoIP 模块来根据客户端的 IP 地址来限制访问。GeoIP 模块可以根据 IP 地址来确定客户端的位置,然后根据这个位置来限制访问。例如,可以根据国家或地区来限制访问,或者根据城市或邮编来限制...

Global site tag (gtag.js) - Google Analytics