实现过程如下(该配置过程中IP和网关均为临时使用,生产中应配置在配置文件中):
1.配置网关服务器(用以模拟ISP)
ifconfig eth0:0 192.168.10.254
ifconfig eth0:1 192.168.20.254
ifconfig eth0:2 192.168.30.254
ifconfig eth0:3 192.168.40.254
ifconfig eth0:4 192.168.50.254
echo 1 > /proc/sys/net/ipv4/ip_forward #开启网卡转发,实现数据包的转发,使该服务器能够具有路由功能
2.配置DNS服务器
#配置服务器IP和默认网关
ifconfig eth0 192.168.30.11/24
route add default gw 192.168.30.254
#安装DNS软件包-bind
yum install bind bind-chroot
#配置DNS主配置文件
#vim /etc/named/chroot/etc/named.conf
- options{
- directory "var/named";
- };
- #创建acl地址池
- acl beijing {
- 192.168.10.0/24;
- # 10.1.0.0/16;
- # 172.16.0.1;
- };
- acl shanghai {
- 192.168.20.0/24;
- };
- 创建试图,匹配包括在不同地址池中的地址,为其分配不同的区域配置文件
- view beijing {
- match-clients { beijing; };
- recursion no;
- zone "smileliuyb.com." {
- type master;
- file "beijing.smileliuyb.com.zone";
- };
- };
- view shanghai {
- match-clients { shanghai; };
- recursion no;
- zone "smileliuyb.com." {
- type master;
- file "shanghai.smileliuyb.com.zone";
- };
- };
- view other {
- match-clients { any; };
- recursion no;
- zone "smileliuyb.com." {
- type master;
- file "beijing.smileliuyb.com.zone";
- };
#配置区域文件
#cd /var/named/chroot/var/named/
#cp /usr/share/doc/bind-9.3.6/sample/var/named/named.local beijing.smileliuyb.com.zone
#vim beijing.smileliuyb.com.zone
- $TTL 86400
- @ IN SOA localhost. root.localhost. (
- 1997022700 ; Serial
- 28800 ; Refresh
- 14400 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
- IN NS localhost.
- www.smileliuyb.com. IN A 192.168.40.250
- image.smileliuyb.com. IN A 192.168.40.251
#cp beijing.smileliuyb.com.zone shanghai.smileliuyb.com.zone
#vim shanghai.smileliuyb.com.zone
- $TTL 86400
- @ IN SOA localhost. root.localhost. (
- 1997022700 ; Serial
- 28800 ; Refresh
- 14400 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
- IN NS localhost.
- www.smileliuyb.com. IN A 192.168.40.250
- image.smileliuyb.com. IN A 192.168.50.251
#修改区域配置文件的属主和属组
chown named.named *.smileliuyb.com.zone
#重启DNS服务
/etc/init.d/named restart
3.配置网页服务器-Apache
#配置服务器IP和网关
ifconfig eth0 192.168.40.250/24
route add default gw 192.168.40.254
#安装apache服务软件包
yum install httpd -y
#创建一个测试页
#vim /var/www/html/index.html
- <html>
- <body>
- <p>
- <img border="0" src="http://image.smileliuyb.com/a.jpg"/>
- </p>
- </body>
- </html>
#重启apache服务
/etc/init.d/httpd restart
4.配置图片服务器-nginx
#配置服务器ip和默认网关
ifconfig eth0 192.168.40.251/24
route add default gw 192.168.40.254
#安装nginx软件包
rpm -Uvh nginx-~.el5.i386.rpm
#配置nginx服务主配置文件
#vim /etc/nginx/nginx.conf
- server {
- listen 80;
- server_name image.smileliuyb.com;
- location / {
- root /tmp/image;
- # 开启目录访问
- autoindex on;
- }
#重启nginx服务
/etc/init.d/nginx restart
5.配置图片缓存服务器-varnish
#配置服务器IP和网关
ifconfig eth0:0 192.168.50.251/24
route add default gw 192.168.50.254
#编译varnish源码包
yum install gcc pcre-devel ncurses-devel -y
tar fxz varnish.~.gz
cd varnish.~
./configure --prefix=/usr/local/varnish && make && make install
#编辑varnish配置文件,加入下面内容
#vim /usr/local/varnish/etc/varnish/default.vcl
- #建立默认的反向代理
- backend default {
- .host = "192.168.40.250";
- .port = "80";
- }
- #建立image的反向代理
- backend image {
- .host = "192.168.40.251";
- .port = "80";
- }
- #建立规则匹配不同的反向代理
- sub vcl_recv {
- # 匹配以.jpg结尾的url
- if (req.url ~ "\.jpg$") {
- set req.backend = image;
- # return (pass);
- return (lookup);
- }
- # 匹配其他
- else {
- set req.backend = default;
- return (pass);
- }
- }
#启动vanishi服务,该命令中,-f指定配置文件位置,-s为缓存文件分配的内存大小,-T指定管理ip,-a指定监听端口
/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,100M -T 127.0.0.1:2000 -a 0.0.0.0:80
在该项业务中,当北京用户需要访问站点www.smileliuyb.com时,需要执行以下过程:首先,用户需要向DNS服务器发出请求,请求www.smileliuyb.com对应的ip地址;
DNS协议 | TCP协议 | IP协议 | MAC |
www.smileliuyb.com's IP is? | dport:53 | Dip:192.168.30.11 |
源目MAC地址 |
DNS接受到该请求,则比对配置文件中的acl地址池,发现其对应的区域文件为beijing.smileliuyb.com.zone,则读取该区域文件内容,并将其中的ip地址回复给用户
DNS协议 | TCP协议 | IP协议 | MAC |
www.smileliuyb.com's ip is 192.168.40.250 |
sport:53 | Dip:192.168.10.X |
源目MAC地址 |
用户在得到该解析后,向www.smileliuyb.com站点发出浏览请求
HTTP协议 | TCP协议 | IP协议 | MAC |
GET *.html HEAD www.smileliuyb.com |
dport:80 | Dip:192.168.40.250 Sip:192.168.10.X |
源目MAC地址 |
服务器在接受到用户请求后,分析该请求并返回相应的页面
HTTP协议 | TCP协议 | IP协议 | MAC |
Type:text/html DATA(index.html) |
sport:80 | Dip:192.168.10.X Sip:192.168.40.250 |
源目MAC地址 |
用户在得到相应的页面后,发现页面中存在代码<img border="0" src=\'#\'" //image.smileliuyb.com/a.jpg"/> ,此时,用户再次向DNS服务器发出请求,请求image.smileliuyb.com的IP地址。
DNS协议 | TCP协议 | IP协议 | MAC |
image.smileliuyb.com's IP is? | dport:53 | Dip:192.168.30.11 |
源目MAC地址 |
DNS服务器在接受到用户请求时,比对acl地址池并返回相应视图所对应的区域文件中关于该网址的IP数据
DNS协议 | TCP协议 | IP协议 | MAC |
image.smileliuyb.com's ip is 192.168.40.251 |
sport:53 | Dip:192.168.10.X |
源目MAC地址 |
在此之前,北京用户与上海用户的数据包基本相同,之后,请求a.jpg时,才会出现不同,上一个DNS请求,上海用户得到的回复数据包如下
DNS协议 | TCP协议 | IP协议 | MAC |
image.smileliuyb.com's ip is 192.168.50.251 |
sport:53 | Dip:192.168.20.X |
源目MAC地址 |
用户在得到DNS的解析应答后,向相应的服务器请求,此时,北京用户发出的请求如下
HTTP协议 | TCP协议 | IP协议 | MAC |
GET a.jpg HEAD image.smileliuyb.com |
dport:80 | Dip:192.168.40.251 Sip:192.168.10.X |
源目MAC地址 |
上海用户发出的请求如下
HTTP协议 | TCP协议 | IP协议 | MAC |
GET a.jpg HEAD image.smileliuyb.com |
dport:80 | Dip:192.168.50.251 Sip:192.168.10.X |
源目MAC地址 |
当北京用户的请求被图片服务器接收到之后,服务器将返回a.jpg文件,用户得到该文件后,这次访问就完成了。
HTTP协议 | TCP协议 | IP协议 | MAC |
Type:image DATA(a.jpg) |
sport:80 | Dip:192.168.10.X Sip:192.168.40.251 |
源目MAC地址 |
而上海用户的请求被图片缓存服务其接收到之后,该缓存服务器将查看自己的缓存空间,如果缓存空间中已近缓存了该图片,则直接应答用户请求;如果缓存空间中没有该文件,则需要先向图片服务器发送请求,请求该图片,在得到应答后,在向用户发送应答数据包,并将该文件存入到自己的缓存空间中。该过程数据包如下:
a.缓存服务器请求图片
HTTP协议 | TCP协议 | IP协议 | MAC |
GET a.jpg HEAD image.smileliuyb.com |
dport:80 | Dip:192.168.40.251 Sip:192.168.50.251 |
源目MAC地址 |
b.图片服务器应答请求缓存服务器请求
HTTP协议 | TCP协议 | IP协议 | MAC |
Type:image DATA(a.jpg) |
sport:80 | Dip:192.168.50.251 Sip:192.168.40.251 |
源目MAC地址 |
c.缓存服务器应答用户请求
HTTP协议 | TCP协议 | IP协议 | MAC |
Type:image DATA(a.jpg) |
sport:80 | Dip:192.168.50.251 Sip:192.168.20.X |
源目MAC地址 |
当上海其他用户再次请求该图片时,因为该图片已近在缓存服务器的缓存中,缓存服务器可以直接向用户返回应答请求,达到加速的目的。