用squid实现cdn网络加速

博客已经搬家,请访问如下地址:http://www.czhphp.com

Content Delivery Network,即“内容发布与速递网络”,能为企业站点提供更快速、稳定服务的网络架构。它采取了分布式网络缓存结构(即国际上流行的Web Cache技术),通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的Cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问Cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。换句话说,CDN就是让网站访问者可以在离自己最近的地方最快的得到可靠的服务。

Squid是一个更专用的代理服务器,性能和效率会比Apache的mod_proxy高很多.
1.下载squid2.6 http://www.squid-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判断的功能.

本例提供域名http://www.quangao.com/进行配置解析,当一用户访问此域名时,主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代理服务器。不但访问速度得到提升,更减轻了源服务器的负载。

工作原理:
本处用http://www.abc.com/为例(主服务器在上海)
全国设了三个代理。北京为01。厦门为02,天津的为03
有北京用户A,厦门用户B。对其进行访问。

经主DNS根据访问的IP地址进行分流,使北京用户的请求指向北京的代理服务器01。厦门用户的请求指向厦门的服务器02。这样就解决了南北互联网的瓶颈问题。

当位于上海的主服务器进行数据更新的时候,全国各地的代理会自动去原服务器更新资料。
如果一旦地方的代理出现故障,它会自动查看附近的结点,进行数据传送,不会影响客户的访问,这一点可由squid.conf 中的cache_peer实现。
例如当北京的代理01出现故障,它会自动与天津的代理03通信,再得到资料后,它会自动回送给北京的用户,而这一切对于用户又都是透明的。就像是在访问原始服务器一样,不过这个可比直接对原始服务器的访问至少快2个数量级。

查看文件传送的一些相关信息,可使用如下命令进行测试
wget –d http://XXX

 

引自:http://bbs.linuxtone.org/thread-142-1-1.html

 

博客已经搬家,请访问如下地址:http://www.czhphp.com

posted @ 2009-03-10 16:51  曹振华  阅读(1634)  评论(0编辑  收藏  举报