Content Delivery Network,即“内容发布与速递
网络”,能为企业站点提供更快速、稳定服务的网络
架构。它采取了分布式网络缓存结构(即国际上流行的Web Cache
技术),通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近
的Cache
内,通过DNS
负载均衡的技术,判断用户来源就近Cache服务器取得所需的内容,
解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。换句话说,
CDN就是让网站访问者可以在离自己最近的地方最快的得到可靠的服务。
Squid是一个更专用的代理服务器,
性能和效率会比
Apache的mod_proxy高很多.
1.
下载squid2.6
cache.org/Versi ... -2.6.STABLE2.tar.gz
2.
安装:
groupadd squid
useradd –g squid squid
tar –zxvf squid-2.6.STABLE2.tar.gz
cd squid-2.6.STABLE2
./configure--prefix=/usr/local/squid --enable-dlmalloc --with-pthreads--enable-poll --disable-internal-
dns --enable-stacktrace--enable-removal-policies="heap,lru" --enable-delay-pools--enable-storeio="aufs,coss,diskd,ufs"
make
make install
cd /usr/local/squid
chown –R squid.squid var/
#/usr/local/squid/etc/squid.conf
#cache服务器IP 218.5.79.91
#监听服务器的3128端口,透明代理,支持域名和IP的虚拟主机
http_port 218.5.79.91:3128 transparent vhost vport
icp_port 0
#原始服务器的IP 218.5.76.247
#为原始服务器80端口服务,即实现反向代理功能。
cache_peer 218.5.76.247 parent 80 0 no-query originserver
#cache_mem 的值一般设为物理内存的1/3
#512M内存,则选用160M即可
cache_mem 160M
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096K
maximum_object_size_in_memory 8K
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
cache_replacement_policy lru
memory_replacement_policy lru
cache_dir ufs /usr/local/squid/var/cache 1024 16 256
access_log /usr/local/squid/var/logs/access.log squid
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
pid_filename /usr/local/squid/var/logs/squid.pid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
refresh_pattern -i \.jpg$ 5 0% 5
refresh_pattern -i \.html$ 5 0% 5
refresh_pattern -i \.htm$ 5 0% 5
#访问控制只须加上一条代理服务器的IP
#禁止对代理IP访问
#如有其它要求可如下进行访问控制
acl myIP dst 218.5.79.91
http_access deny myIP
#把下面的http_access deny all 改为:
http_access allow all
#
管理员的邮箱地址以便接收一些cache信息
cache_mgr 用户名@
cache_effective_user squid
cache_effective_group squid
#以上为squid最简单的
,如有其它要求,可自行对配置
文件进行修改。
#修改好配置文件执行如下
命令
#做一个转发
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 0.0.0.0/0.0.0.0 --dport 80 -j REDIRECT --to-ports 3128
#生成cache目录
/usr/local/squid/sbin/squid –z
#启动squid
/usr/local/squid/sbin/squid –NCdl
#关闭 squid
/usr/local/squid/sbin/squid –k shutdown
#如果访问
日志写满,可定期执行如下命令:
/usr/local/squid/sbin/squid –k rotate
#或通过crontab每天0点截断/轮循日志
0 0 * * * (/usr/local/squid/sbin/squid –k rotate)
#如果代理运行中,进行了对配置文件的修改,可执行如下指令
#重新读取配置文件
/usr/local/squid/sbin/squid –k reconfigure
#查看客户的点击的情况,可查看代理access.log
tail –f /usr/local/squid/var/logs/access.log
#查看cache目录中存储了什么文件可以查看store.log
vi /usr/local/squid/var/logs/store.log
这样基本代理配置就基本实现了。
Squid + DNS合理配置能就更能实现CDN在南北网络中的特殊作用:
为了尽量减少用户的跨地域访问,最有效的方法就是对用户的实际地址进行判断,从而为其选择更合适的服务器进行访问.这里我们所采用的是至少BIND9.X 以上的版本做DNS.因为最新的BIND9为其新添加了对客户IP判断的功能.
本例提供域名进行配置解析,当一用户访问此域名时,主DNS服务器对其进行判断如果其网段为网通地址段,
则解析其到北京的一台服务器上进行访问.
如果其IP地址段为电信地址段,则令其到厦门的服务器上进行访问.若都不是则令其访问默认的服务器.
主DNS域名服务器的named.conf配置如下:
options {
directory "/usr/local/named/etc/";
pid-file "/var/run/named/named.pid";
version "0.0.0";
datasize 40M;
};
logging
{
channel query_log
{
file "query.log" versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
category queries
{
query_log;
};
};
acl "BEIJING" {
203.196.0.0/16;
};
acl "XIAMEN" {
202.101.0.0/16;
};
view "bj" {
match-clients { BEIJING; };
zone "." {
type hint;
file "/usr/local/named/etc/named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "/usr/local/named/etc/localhost";
};
zone "quangao.com" {
type master;
file "/usr/local/named/etc/quangao.com";
};
};
view "xm" {
match-clients { XIAMEN; };
zone "." {
type hint;
file "/usr/local/named/etc/named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "/usr/local/named/etc/localhost";
};
zone "quangao.com" {
type master;
file "/usr/local/named/etc/quangao_.com";
};
};
view "other" {
match-clients { any; };
zone "." {
type hint;
file "/usr/local/named/etc/named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "/usr/local/named/etc/localhost";
};
zone "quangao.com" {
type master;
file "/usr/local/named/etc/quangao_o.com";
};
};
key "rndc-key" {
algorithm hmac-md5;
secret "/vrFZVATJcy/Zo6pmtOoEA==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
这样由主DNS的控制进行对来访的IP进行分流,从而使用户访问离其较近的proxy代理服务器。不但访问速度得到提升,更减轻了源服务器的负载。
工作原理:
本处用为例(主服务器在上海)
全国设了三个代理。北京为01。厦门为02,天津的为03
有北京用户A,厦门用户B。对其进行访问。
经主DNS根据访问的IP地址进行分流,使北京用户的请求指向北京的代理服务器01。厦门用户的请求指向厦门的服务器02。这样就解决了南北互联网的瓶颈问题。
当位于上海的主服务器进行数据更新的时候,全国各地的代理会自动去原服务器更新资料。
如果一旦地方的代理出现故障,它会自动查看附近的结点,进行数据传送,不会影响客户的访问,这一点可由squid.conf 中的cache_peer实现。
例如当北京的代理01出现故障,它会自动与天津的代理03通信,再得到资料后,它会自动回送给北京的用户,而这一切对于用户又都是透明的。就像是在访问原始服务器一样,不过这个可比直接对原始服务器的访问至少快2个数量级。
查看文件传送的一些相关信息,可使用如下命令进行测试
wget –d
CCIE Security 2009 IOS防火墙合集