设为首页 收藏本站
查看: 1755|回复: 0

[经验分享] 用squid实现cdn网络加速

[复制链接]

尚未签到

发表于 2015-9-3 07:22:42 | 显示全部楼层 |阅读模式
  博客已经搬家,请访问如下地址: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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108834-1-1.html 上篇帖子: 分享一个不错的squid 配置文件 下篇帖子: Squid配置指令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表