目录
CDN 服务器原理(来源于网络)
① 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
② CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
③ 用户向CDN的全局负载均衡设备发起内容URL访问请求。
④ CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
⑤ 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
⑥ 全局负载均衡设备把服务器的IP地址返回给用户。
⑦ 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
DNS服务器根据用户IP地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用CDN服务的网站,只需将其域名解析权交给CDN的GSLB设备,将需要分发的内容注入CDN,就可以实现内容加速了。
流程图(源于网络):
一. CDN实验
分别模拟【联通】【移动】用户访问同一个域名显示不同的结果
部署
准备三台虚拟机【client】【DNS】【web】
client:
ip:
192.168.1.99
192.168.122.100
DNS 服务器:
ip:
192.168.122.101
web 服务器:
ip:
192.168.122.200
192.168.122.201
1) web服务器
1. 安装apache
yum -y install httpd
2. 新添加两块临时网卡
ip addr add 192.168.122.200/24 dev ens33 label ens33:0
ip addr add 192.168.122.201/24 dev ens33 label ens33:1
3. 配置 ---基于 ip 的域名解析
修改配置文件
cd /etc/httpd/conf.d
vim cdn.conf
<VirtualHost 192.168.122.200:80>
ServerName www.syz.com
DocumentRoot /srv/cnc/
</VirtualHost>
<Directory "/srv/cnc/">
Require all granted
</Directory>
<VirtualHost 192.168.122.201:80>
ServerName www.syz.com
DocumentRoot /srv/tel/
</VirtualHost>
<Directory "/srv/tel/">
Require all granted
</Directory>
重启服务
systemctl restart httpd
2) DNS 服务器
DNS视图
1. 定义试图
vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };# 定义 acl 访问控制列表,允许那些 ip 来访问解析
acl tel { 192.168.1.99; }; # 注意:此处为客户端测试的网卡 ip
acl cnc { 192.168.122.100; }; # 注意:此处为客户端测试的网卡 ipview telnet {
match-clients {tel;};
recursion yes;
include "/etc/telnet.zones";
};view cncnet {
match-clients {cnc;};
recursion yes;
include "/etc/cncnet.zones";
};
2.定义zone
touch /etc/telnet.zones
touch /etc/cncnet.zones
chown .named /etc/telnet.zones
chown .named /etc/cncnet.zones
chmod 640 /etc/telnet.zones
chmod 640 /etc/cncnet.zones
vim /etc/telnet.zones
zone "syz.com" IN {
type master;
file "syz.com.tel";
};
vim /etc/cncnet.zones
zone "syz.com" IN {
type master;
file "syz.com.cnc";
};
3.对应zone文件
touch /var/named/syz.com.tel
touch /var/named/syz.com.cnc
chown .named /var/named/syz.com.tel
chown .named /var/named/syz.com.cnc
chmod 640 /var/named/syz.com.tel
chmod 640 /var/named/syz.com.cnc
vim /var/named/syz.com.tel
$TTL 86400
@ IN SOA dns.syz.com. root ( 20151230 1D 1H 1W 3H )
IN NS dns.syz.com.
dns IN A 192.168.122.101
www IN A 192.168.122.201
vim /var/named/syz.com.cnc
$TTL 86400
@ IN SOA dns.syz.com. root ( 20151230 1D 1H 1W 3H )
IN NS dns.syz.com.
dns IN A 192.168.122.101
www IN A 192.168.122.200
3) client测试:
vim /etc/resolv.conf
nameserver 192.168.122.101 # 添加 DNS 服务器
停止其中一块网卡
nmcli con down ens33
测试
host www.syz.com
开启停止的网卡ens33,停止另一块网卡
nmcli con up ens33
nmcli con down ens37
再次测试
host www.syz.com
二. 缓存
例如:
- varnish
- squid代理软件
- nginx
squid代理服务器
安装包: squid-3.1.10-16.el6.x86_64.rpm
配置文件: /etc/squid.conf
端口: 3128
启动服务: service squid restart
文档: /usr/share/doc/squid-3.1.10/squid.conf.documented
资料: squi中文权威指南
1) 正向代理
1.客户端指代理服务器
2.代理服务器 开启访问 启动服务
2) 透明代理
1.客户端 自动获取ip 网关 DNS
2.代理服务器
http_port 3128 transparent
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3128
现在在公司中一般都使用反向代理
3) 反向代理
squid配置
vim /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 100 16 256
http_access allow
http_port 80 vhost
cache_peer 10.10.10.100 parent 80 0 originserver # 10.10.10.100 为 真正web服务器的 ip
使用本地机器(直接浏览器中输入代理机器ip)或者一台其他的服务器(curl)访问代理服务器的 ip,即可出现 web 服务器中的默认页面
在 /var/spool/squid 中的 00/00 目录下会出现一个新的文件,记录了刚才访问的内容,即缓存文件
统计命中率
cat /var/log/squid/access.log | gawk '{print $4}' | sort | uniq -c | sort -nr
apache记录来源ip
vim /etc/httpd/conf/httpd.conf
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
tail -f /var/log/messages
三. 练习实验:CDN+squid
一台 CDN-DNS 服务器
解析指向
客户端 ip1 => 192.168.122.101
客户端 ip2 => 192.168.122.102
两台 squid 代理
指向 web
第一台:192.168.122.101 => 192.168.122.200
第二台:192.168.122.102 => 192.168.122.201
一台 web 服务器:
两块网卡:
192.168.122.200
192.168.122.201
域名:
www.syz.com
客户端(进行测试)
ip1:
命令:host www.syz.com
命令:curl www.syz.com
切换网卡(ip)↑↓
ip2:
命令:host www.syz.com
命令:curl www.syz.com