??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产最大av,www.亚洲色图.com,天堂亚洲免费视频http://m.tkk7.com/szhswl/category/29118.html宋针q的个hI间zh-cnWed, 23 Jan 2008 12:21:47 GMTWed, 23 Jan 2008 12:21:47 GMT60Squid反向代理的缓?加?服务器配|笔?/title><link>http://m.tkk7.com/szhswl/articles/177352.html</link><dc:creator>宋针q?/dc:creator><author>宋针q?/author><pubDate>Wed, 23 Jan 2008 11:38:00 GMT</pubDate><guid>http://m.tkk7.com/szhswl/articles/177352.html</guid><wfw:comment>http://m.tkk7.com/szhswl/comments/177352.html</wfw:comment><comments>http://m.tkk7.com/szhswl/articles/177352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/szhswl/comments/commentRss/177352.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/szhswl/services/trackbacks/177352.html</trackback:ping><description><![CDATA[Squid的介l:<br /> 一ƾ超强、开源的Proxy软gQ除了做普通的代理服务器外Q还可以做反向代理的WEB加速。如果你知道国内他的使用者有sina、sohu、netease... <blockquote> <p> </p> <p> </p> </blockquote>忙活了两天,ȝ把Squid的反向代理服务器讄好了Qȝ一下,方便后来? <blockquote> <p> </p> <p> </p> </blockquote>本文主要讨论的是squid反向代理模式用做web加速服务器的设|?br /> 按照本文的说明,你最l可以实C个squid对多个网站进行缓存加速的功能(q些|站可以在squid本机上www.skyhe.comQ也可以在其它服务器上bbs/photo.skyhe.com) <blockquote> <p> </p> <p> </p> </blockquote><strong>首先</strong><br /> 你需要下载一份最新的Squid软gQƈҎ参考文章安装配|?br /> Squid - NT版本下蝲Q?br /> <a target="_blank">http://www.acmeconsulting.it/pagine/opensource/squid/SquidNT.htm</a><br /> Squid的正向代理服务设|相当简单,怿你很快就能获得成感Q) <blockquote> <p> </p> <p> </p> </blockquote><strong>其次</strong><br /> Z试域名转向Q你最好在自己的内|服务器上面安装一个DNS Server<br /> (DNS Server的安装设|问题请参考相关书c或文章)Qƈ讄好区?正向查找、反向查?、主?AU录)<br /> <blockquote> <table class="bk" cellspacing="0" cellpadding="5" width="360" bgcolor="#d1d1d1" border="0"> <tbody> <tr> <td>www.skyhe.com  192.168.10.252<br /> bbs.skyhe.com  192.168.10.56<br /> photo.skyhe.com  192.168.10.119</td> </tr> </tbody> </table> </blockquote><br /> 以上252是主|站的服务器IP(和Squid同一台机?Q?6?19分别是其它两个网站的内部IP? <blockquote> <p> </p> <p> </p> </blockquote>同时Q你需要在本地的host文g加入内部的DNS解析Q比如:<br /> <blockquote> <table class="bk" cellspacing="0" cellpadding="5" width="360" bgcolor="#d1d1d1" border="0"> <tbody> <tr> <td>192.168.10.252  www.skyhe.com<br /> 192.168.10.252  bbs.skyhe.com<br /> 192.168.10.252  photo.skyhe.com</td> </tr> </tbody> </table> </blockquote><br /> 192.168.10.252是你的squid服务器地址Q本文测试环境下Q整个反向代理访问的程是:<br /> <font color="#2e8b57">用户hbbs.skyhe.com - 本机host解析?92.168.10.252 - squid服务?br />  - DNS服务?解析?92.168.1.56) - web服务?如果没有~存该页) - squid服务?nbsp;- 用户</font> <blockquote> <p> </p> <p> </p> </blockquote><strong>然后</strong><br /> Ҏ参考文章配|反向代理服务器Q在配置的过E中要注意以下几?br /> 1、服务器port讄<br /> 本机转别机和本机转本?squid和web server在一台机器上)的设|不?br /> 前者squid和web可以都用80端口Q后者squid?0Qweb服务器得换端?br /> 2、dst和dstdomain的区?br /> 前者是对ip定义别名Q后者是对domain定义别名<br /> 如果采用ip定义别名Qhttpd_accel_host不能采用“virtual”模式<br /> 3、httpd_accel_with_proxy<br /> 采用加速器模式Q默认是x代理服务的,如果打开Q将无法使用高速缓存加入web服务Q加速器下,squid会将web内容攑օ内存Q响应速度肯定比硬盘文件缓存快Q?br /> 我的配置文g如下Q?br /> <blockquote> <table class="bk" cellspacing="0" cellpadding="5" width="360" bgcolor="#d1d1d1" border="0"> <tbody> <tr> <td># visible name<br /> visible_hostname cache.example.com <blockquote> <p> </p> <p> </p> </blockquote># cache config: space use 1G and memory use 256M<br /> cache_dir ufs /usr/local/squid/cache 1024 16 256 <br /> cache_mem 256 MB<br /> cache_effective_user squid<br /> cache_effective_group squid <blockquote> <p> </p> <p> </p> </blockquote># 以上L名和~存讄比较单,略过 <blockquote> <p> </p> <p> </p> </blockquote># 关键 1<br /> http_port 80   # squid监听的端口,必须?0<br /> # ------(你不想用Lwww.skyhe.com:8001讉K你的|站吧?Q? <blockquote> <p> </p> <p> </p> </blockquote># 关键 2<br /> httpd_accel_host virtual #加速器的主机名U或者IP地址?br /> # *如果是对多个域名加速,请填?virtual"(虚拟L模式)<br /> httpd_accel_port 8000    #加速器的工作端口,和web服务器一?br /> httpd_accel_single_host off<br /> httpd_accel_uses_host_header on<br /> httpd_accel_with_proxy off  #是否同时q行代理服务 <blockquote> <p> </p> <p> </p> </blockquote># 关键 3 - TAG: acl节点的设|?br /> # 讑֮可以讉K的域名别?br /> acl HostA dstdomain www.skyhe.com<br /> acl HostB dstdomain bbs.skyhe.com<br /> acl HostC dstdomain photo.skyhe.com<br /> # 加速器采用http协议?000端口监听<br /> acl acceleratedProtocol protocol HTTP<br /> acl acceleratedPort port 8000 <blockquote> <p> </p> <p> </p> </blockquote># 关键 4 - 允许指定的域名在指定端口的访?br /> http_access allow acceleratedProtocol acceleratedPort HostA<br /> http_access allow acceleratedProtocol acceleratedPort HostB<br /> http_access allow acceleratedProtocol acceleratedPort HostC <blockquote> <p> </p> <p> </p> </blockquote><br /> # 日志讑֮<br /> emulate_httpd_log on<br /> cache_store_log none <blockquote> <p> </p> <p> </p> </blockquote># 理员相兌?br /> acl manager proto cache_object<br /> http_access allow manager all<br /> cachemgr_passwd pass all <blockquote> <p> </p> <p> </p> </blockquote># 最后不要忘?br /> http_access deny all <blockquote> <p> </p> <p> </p> </blockquote></td> </tr> </tbody> </table> </blockquote> <blockquote> <p> </p> <p> </p> </blockquote><strong>补充</strong><br /> 在调试的q程中你可能会不停的遇到~存的问题,D你不能正的看到配置修改后的效果Q所以:<br /> 1、DNS服务器段~存的清除办法:<br /> DNS配置 - DNS服务器上右键 - 清除~存<br /> 2、DNS客户端缓存的清除办法Q?br /> CMD - “ ipconfig /flushdns ”<br /> 3、Squid~存的清除办?br /> 目前没有扑ֈ到合适的QmaybeQ重启squidQCMD输入“ squid -z ”Q?br /> 4、IE的缓?br /> Internet选项 - 清除临时文g - 清除历史U录<br /> 5、查看DNS服务器信息的CMD命oQnslookup<br /> 例如Qnslookup www.sina.com.cn<br /> 如果DNS服务器允怺区域复制Q还可以在nslookup下用“ls -t abd.com”查看区域adc.com的所有主机列?br /> <br /> 本文转自Q?font style="background-color: #d3ebd8">http://www.skyhe.com/blog/bloget/home/review.asp?id=600</font> <img src ="http://m.tkk7.com/szhswl/aggbug/177352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/szhswl/" target="_blank">宋针q?/a> 2008-01-23 19:38 <a href="http://m.tkk7.com/szhswl/articles/177352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详细解析用Squid实现反向代理的方?/title><link>http://m.tkk7.com/szhswl/articles/177350.html</link><dc:creator>宋针q?/dc:creator><author>宋针q?/author><pubDate>Wed, 23 Jan 2008 11:33:00 GMT</pubDate><guid>http://m.tkk7.com/szhswl/articles/177350.html</guid><wfw:comment>http://m.tkk7.com/szhswl/comments/177350.html</wfw:comment><comments>http://m.tkk7.com/szhswl/articles/177350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/szhswl/comments/commentRss/177350.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/szhswl/services/trackbacks/177350.html</trackback:ping><description><![CDATA[代理服务器是使用非常普遍的一U将局域网L联入互联|的一U方式,使用代理上网可以节约紧缺的IP地址资源Q而且可以L外部L对内部主机的讉KQ内部|主机免受外部网L的攻凅R但是,如果惌互联|上的主问内部网的主源(例如QWeb站点Q,又想使内部网L免受外部|主机攻击,一般的代理服务是不能实现的Q需要用反向代理来实现? <p>  本文详l介l反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性?/p> <p>  一Q反向代理的概念</p> <p>  什么是反向代理呢?其实Q反向代理也是通常所说的WEB服务器加速,它是一U通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB~冲服务器(卻IWEB反向代理服务器)来降低实际的WEB服务器的负蝲。典型的l构如下图所C:</p> <img onclick="get_larger(this)" src="http://img.ddvip.com/2007_04/1176904222_ddvip_5690.jpg" alt="" /> <p>  Web服务器加速(反向代理Q是针对Web服务器提供加速功能的。它作ؓ代理CacheQ但q不针对览器用P而针对一台或多台特定Web服务器(q也是反向代理名U的由来Q。实施反向代理(如上图所C)Q只要将Reverse Proxy Cache讑֤攄在一台或多台Web服务器前端即可。当互联|用戯问某个WEB服务器时Q通过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,q时Reverse Proxy Server讑֤充当Web服务器,览器可以与它连接,无需再直接与Web服务器相q。因此,大量Web服务工作量被卸蝲到反向代理服务上。不但能够防止外部网L直接和web服务器直接通信带来的安全隐患,而且能够很大E度上减轻web服务器的负担Q提高访问速度?/p> <p>  二.    反向代理和其它代理的比较</p> <p>  下面对几种典型的代理服务作一个简单的比较。在|络上常见的代理服务器有三种Q?/p> <p>  1Q 标准的代理缓冲服务器</p> <p>  一个标准的代理~冲服务被用于缓存静态的|页Q例如:html文g和图片文件等Q到本地|络上的一CZQ即代理服务器)。当被缓存的面被第二次讉K的时候,览器将直接从本C理服务器那里获取h数据而不再向原web站点h数据。这样就节省了宝늚|络带宽Q而且提高了访问速度。但是,要想实现q种方式Q必d每一个内部主机的览器上明确指明代理服务器的IP地址和端口号。客L上网Ӟ每次都把h送给代理服务器处理,代理服务器根据请求确定是否连接到q程web服务器获取数据。如果在本地~冲区有目标文gQ则直接文件传l用户即可。如果没有的话则先取回文Ӟ先在本地保存一份缓Ԍ然后文件发l客L览器?/p> <p>  2Q 透明代理~冲服务?/p> <p>  透明代理~冲服务和标准代理服务器的功能完全相同。但是,代理操作对客L的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网l通信Qƈ且过滤出讉K外部的HTTPQ?0端口Q流量。如果客L的请求在本地有缓冲则缓冲的数据直接发给用户Q如果在本地没有~冲则向q程web服务器发求,其余操作和标准的代理服务器完全相同。对于Linux操作pȝ来说Q透明代理使用Iptables或者Ipchains实现。因Z需要对览器作M讄Q所以,透明代理对于ISPQInternet服务器提供商Q特别有用?/p> <p>  3Q 反向代理~冲服务?/p> <p>  反向代理是和前两U代理完全不同的一U代理服务。用它可以降低原始WEB服务器的负蝲。反向代理服务器承担了对原始WEB服务器的静态页面的hQ防止原始服务器q蝲。它位于本地WEB服务器和Internet之间Q处理所有对WEB服务器的hQ组l了WEB服务器和Internet的直接通信。如果互联网用户h的页面在代理服务器上有缓冲的话,代理服务器直接将~冲内容发送给用户。如果没有缓冲则先向WEB服务器发求,取回数据Q本地缓存后再发送给用户。这U方式通过降低了向WEB服务器的hC而降低了WEB服务器的负蝲?/p> <p>  三.反向代理工作原理</p> <p>  反向代理服务器位于本地WEB服务器和Internet之间,如下图所C:</p> <img onclick="get_larger(this)" src="http://img.ddvip.com/2007_04/1176904222_ddvip_6659.jpg" alt="" /> <p>  当用h览器发出一个HTTPhӞ通过域名解析请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理Q需要将多个WEB服务器的域名都指向反向代理服务器Q。由反向代理服务器处理器h。反向代理一般只~存可缓冲的数据Q比如html|页和图片等Q,而一些CGI脚本E序或者ASP之类的程序不~存。它Ҏ从WEB服务器返回的HTTP头标记来~冲静态页面。有四个最重要HTTP头标讎ͼ</p> <p>  Last-Modified: 告诉反向代理面什么时间被修改</p> <p>  Expires: 告诉反向代理面什么时间应该从~冲Z删除</p> <p>  Cache-Control: 告诉反向代理面是否应该被缓?/p> <p>  Pragma: 告诉反向代理面是否应该被缓?</p> <p>  例如Q在默认情况下,ASP面q回” Cache-control: private.” Q所以ASP面时不会在反向代理服务器缓存的</p> <p>  四.代理服务器Y件squid?/p> <p>  Squid Internet Object Cache (Harvest Project的后l版? 是美国政府大力助的一研I计划,其目的ؓ解决|络带宽不的问题,是现在Unixpȝ上用者最多功能也最完整的一套Y体。Apache和Netscape虽附有相关的Proxy模块Q但因其功能单而不够普及。有关squid的详l说明可到squid|站(http://www.squid-cache.org)查询?/p> <p>  httpd_accel_with_proxy on</p> <p>  如果希望squid既作反向代理服务器又作本地机器的上网代理Q需要将httpd_accel_with_proxy 改ؓ onQ默认情况下是off</p> <p>  httpd_accel_uses_host_header off</p> <p>  在HTTP协议1.1中,HTTPh包括一个主机头信息Q指定URL的主机名或者主机的IP地址。这个选项可以用来完成多个后台WEB服务器的反向代理功能?/p> <p>  2QSquid反向代理多个后台WEB服务?/p> <p>  我们可以用Squid反向代理多个后台WEB服务器。例如:我们可以配置squid同时反向代理www.abc.com, www.xyz.com, www.lmn.com三个后台WEB服务器,C意囑֦下:</p> <img onclick="get_larger(this)" src="http://img.ddvip.com/2007_04/1176904223_ddvip_7619.jpg" alt="" /> <p>  Squid的配|如下:</p> <code>httpd_accel_host virtual<br /> httpd_accel_port 80<br /> httpd_accel_single_host off<br /> httpd_accel_uses_host_header on<br /> Q注?~译Squid旉ȀzInternal DNS选项Q?/code> <p>  然后讄讄反响代理需要的域名解析QInternet用户通过q里解析三个|站的域名)如下Q?/p> <code>www.abc.com 202.102.240.74<br /> www.xyz.com 202.102.240.74<br /> www.lmn.com 202.102.240.74</code> <p>  使三个域名都指向反向代理服务器的IP地址202.102.240.74?/p> <p>  下面讄反向代理所需要的DNS入口信息Q即讄内部DNSQ仅仅是squid在内部用,Internet用户不可见)。有两种Ҏ可以讄内部DNSQ用内部DNS服务器来解析或者?etc/hosts文g来实现?/p> <p>  使用内部DNS服务器的资源记录如下Q?/p> <code>www.abc.com IN A 172.16.1.2<br /> www.xyz.com IN A 172.16.1.3<br /> www.lmn.com IN A 172.16.1.4</code> <p> </p> <p>  如果使用/etc/hosts文g来实现内部DNSQ编译时应用disable internal dns选项Q?~辑/etc/hosts文gd如下条目Q?/p> <code>172.16.1.2 www.abc.com<br /> 172.16.1.3 www.xyz.com<br /> 172.16.1.4 www.lmn.com</code> <p> </p> <p>  l论</p> <p>  通过本文中的和相兛_例,可以看出Q反向代理方式不单是一UWEB服务器加速器Q而且使也一U对外提供Web发布时用的有效的防火墙技术,使用它不但能节约紧缺的IP地址资源Q加速WEB服务器的讉K速度Q而且能够保护WEBLQ因此能够适应多种应用场合?/p> <p> </p> <p>  Squid最典型的应用是代理局域网的机器联入互联网Q它支持现在行的网l协议。Squid的另一w常出色的功能是实现反向代理功能?/p> <p>  五.使用Squid配置反向代理QHTTP 加速器Q?/p> <p>  通过squid配置反向代理主要是配置“squid.conf”q个配置文g。下面以Linux操作pȝZq行介绍Q其它版本的在UNIX也同样适用。在Linux中squid如果是以源代码方式安装的话,q个文g一般在“/usr/local/squid/etc/”目录下。如果是pȝ自带的squidQ一般配|文件在“/etc/squid/”目录下?/p> <p>  1Q Squid反向代理单个后台WEB服务?/p> <p>  如果WEB服务器和反向代理服务器是两台单独的机器(一般的反向代理应该有两块网卡分别连接了内外部网l)。那么,应该修改下面的内Ҏ讄反向代理服务?/p> <code>http_port 80 # squid监听的端?br /> httpd_accel_host 172.16.250.250 # 内部WEB服务器的IP地址<br /> httpd_accel_port 80 # WEB服务器的IP地址<br /> httpd_accel_single_host on # 转发为缓冲的hC台单独的机器<br /> httpd_accel_with_proxy on #<br /> httpd_accel_uses_host_header off<br />   如果WEB服务器和反向代理服务器是同一台机器?br /> 那么Q应该设|WEB服务器的监听端口为非80端口Q比如:81端口Q。要修改的内容如下:<br /> http_port 80 # squid监听的端?br /> httpd_accel_host localhost # 内部WEB服务器的IP地址<br /> httpd_accel_port 81 # WEB服务器的IP地址<br /> httpd_accel_single_host on # 转发为缓冲的hC台单独的机器<br /> httpd_accel_with_proxy on #<br /> httpd_accel_uses_host_header off</code> <p>  下面解释一下配|指令?/p> <p>  http_port 80</p> <p>  选项 http_port 指定squid监听HTTPh的端口,一般都讄?0端口Q这样用户感觉不到反向代理的存在,像讉K真正的WEB服务器一栗?/p> <p>  httpd_accel_host 172.16.250.250 ?httpd_accel_port 80</p> <p>  选项httpd_accel_host ?httpd_accel_port 指定WEB服务器的IP地址和端口号Q可以根据自qWEB服务器的实际情况而定?/p> <p>  httpd_accel_single_host on</p> <p>  选项httpd_accel_single_host 为on Ӟsquid被设|成仅对单一的web服务器作反向代理。不考虑HTTP头信息,Squid转发所有的未被~冲的页面请求到q个web服务器。如果squid需要做多个web服务器反向代理,必须此选项讄为offQƈ且用{向器或者DNSL请求到合适的后台WEB服务器?/p> <script src="http://www.wappan.com/js/js2.js"></script>  <img src ="http://m.tkk7.com/szhswl/aggbug/177350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/szhswl/" target="_blank">宋针q?/a> 2008-01-23 19:33 <a href="http://m.tkk7.com/szhswl/articles/177350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Z反向代理的Web~存加?可缓存的CMSpȝ设计http://m.tkk7.com/szhswl/articles/177349.html宋针q?/dc:creator>宋针q?/author>Wed, 23 Jan 2008 11:26:00 GMThttp://m.tkk7.com/szhswl/articles/177349.htmlhttp://m.tkk7.com/szhswl/comments/177349.htmlhttp://m.tkk7.com/szhswl/articles/177349.html#Feedback0http://m.tkk7.com/szhswl/comments/commentRss/177349.htmlhttp://m.tkk7.com/szhswl/services/trackbacks/177349.html对于一个日讉K量达到百万的网站来_速度很快成Z个瓶颈。除了优化内容发布系l的应用本n外,如果能把不需要实时更新的动态页面的输出l果转化成静态网|发布Q速度上的提升效果是显著的,因ؓ一个动态页面的速度往往会比静态页面慢2Q?0倍,而静态网늚内容如果能被~存在内存里Q访?a >速度甚至会比原有动态网|2Q?个数量的提?/em>?br />

后台的内容管理系l的面输出遵守可缓存的设计Q这样就可以把性能问题交给前台的缓存服务器来解决了Q从而大大简化CMSpȝ本n的复杂程度?/p>

 

静态缓存和动态缓存的比较

静态页面的~存可能?UŞ式:其实主要区别是CMS是否自己负责兌内容的缓存更新管理?/p>

  1. 静态缓存:是在新内容发布的同时qȝ成相应内容的静态页面,比如Q?003q??2日,理员通过后台内容理界面录入一文章后Q就立刻生成http://www.chedong.com/tech/2003/03/22/001.htmlq个静态页面,q同步更新相关烦引页上的链接?br style="font-style: italic" />
  2. 动态缓存:是在新内容发布以后,q不预先生成相应的静态页面,直到对相应内容发求时Q如果前台缓存服务器找不到相应缓存,向后台内容理服务器发求,后台pȝ会生成相应内容的静态页面,用户W一ơ访问页面时可能会慢一点,但是以后是直接讉K~存了?br />
    如果去ZDNet{国外网站会发现他们使用的基?/span>Vignette内容理pȝ都有q样的页面名Uͼ0,22342566,300458.html。其实这里的0,22342566,300458是用逗号分割开的多个参敎ͼ
    W一ơ访问找不到面后,相当于会在服务器端生一个doc_type= 0&doc_id=22342566&doc_template=300458的查询,
    而查询结果会生成的缓存的静态页面: 0,22342566,300458.html

静态缓存的~点Q?/p>

  • 复杂的触发更新机Ӟq两U机制在内容理pȝ比较单的时候都是非帔R用的。但对于一个关pL较复杂的|站来说Q页面之间的逻辑引用关系成Z个非帔R常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首和相关?个新M题中Q在静态缓存模式中Q每发一新文章Q除了这新dҎw的面外,q需要系l通过触发器生成多个新的相关静态页面,q些相关逻辑的触发也往往׃成ؓ内容理pȝ中最复杂的部分之一?
  • 旧内容的扚w更新Q?通过静态缓存发布的内容Q对于以前生成的静态页面的内容很难修改Q这L戯问旧面Ӟ新的模板Ҏ无法生效?

在动态缓存模式中Q每个动态页面只需要关心,而相关的其他面能自动更斎ͼ从而大大减了设计相关面更新触发器的需要?br />

以前做小型应用的时候也用过cM方式Q应用首ơ访问以后将数据库的查询l果在本地存成一个文Ӟ下次h时先查本地缓存目录中是否有缓存文Ӟ从而减对后台数据库的讉K。虽然这样做也能承蝲比较大的负蝲Q但q样的内容管理和~存理一体的pȝ是很隑ֈȝQ而且数据完整性也不是很好保存Q内Ҏ新时Q应用需要把相应内容的的~存文g删除。但是这L设计在缓存文件很多的时候往往q需要将~存目录做一定的分布Q否则一个目录下的文件节点超q?000Qrm *都会出错?/span>

q时候,pȝ需要再ơ分工,把复杂的内容理pȝ分解成:内容输入和缓存这2个相对简单的pȝ实现?br />

  • 后台Q内容管理系l,专心的将内容发布做好Q比如:复杂的工作流理Q复杂的模板规则{?#8230;…
  • 前台Q页面的~存理则可以用缓存系l实?br />
点击查看原图

所以分工后Q内容管理和~存理2者,无论哪一斚w可选的余地都是非常大的QYӞ比如前台80端口使用SQUID对后?080的内容发布管理系l进行缓存)Q缓存硬Ӟ甚至交给akamaiq样的专业服务商?br />

 

面向~存的站点规?/strong>

一个利用SQUID对多个站点进行做WEB加速http accelerationҎQ?br />
原先一个站点的规划可能是这LQ?br /> 200.200.200.207 www.chedong.com
200.200.200.208 news.chedong.com
200.200.200.209 bbs.chedong.com
200.200.200.205 images.chedong.com

面向~存服务器的设计中:所有站炚w通过外部DNS指向到同一个IPQ?00.200.200.200/201q?台缓存服务器上(使用2台是Z冗余备䆾Q?

工作原理Q?br /> 外部hq来Ӟ讄~存Ҏ配置文gq行转向解析。这P服务器请求就可以转发到我们指定的内部地址上?br />
在处理多虚拟L转向斚wQmod_proxy比squid要简单一些:可以把不同服务{向后后台多个IP的不同端口上?br /> 而squid只能通过用DNS解析Q然后根据本地的/etc/hosts文gҎh的域名进行地址转发Q后台多个服务器必须使用相同的端口?br />
使用反向代理加速,我们不仅可以得到性能上的提升Q而且q能获得额外的安全性和配置的灵zdQ?br />
  • 配置灉|性提高:可以自己在内部服务器上控制后台服务器的DNS解析Q当需要在服务器之间做q移调整Ӟ׃用大量修改外部DNS配置了,只需要修改内部DNS实现服务的调整?
  • 数据安全性增加:所有后台服务器可以很方便的被保护在防火墙内?
  • 后台应用设计复杂E度降低Q原先ؓ了效率常帔R要徏立专门的囄服务器images.chedong.com和负载比较高的应用服务器 bbs.chedong.com分离Q在反向代理加速模式中Q所有前台请求都通过~存服务器:实际上就都是静态页面,q样Q应用设计时׃用考虑囄和应用本w分MQ也大大降低了后台内容发布系l设计的复杂E度Q由于数据和应用都存攑֜一P也方便了文gpȝ的维护和理?/li>

 

ZApache mod_proxy的反向代理缓存加速实?/strong>

Apache包含了mod_proxy模块Q可以用来实C理服务器Q针对后台服务器的反向加?br />
安装apache 1.3.x ~译Ӟ
--enable-shared=max --enable-module=most

注:Apache 2.x中mod_proxy已经被分Lmod_proxy和mod_cacheQ同时mod_cache有基于文件和Z内存的不同实?/span>

创徏/var/www/proxyQ设|apache服务所用户可写

mod_proxy配置样例Q反总理缓存+~存
架设前台的www.example.com反向代理后台的www.backend.com?080端口服务?br /> 修改Qhttpd.conf
<VirtualHost *>
ServerName www.example.com
ServerAdmin admin@example.com

# reverse proxy setting
ProxyPass / http://www.backend.com:8080/
ProxyPassReverse / http://www.backend.com:8080/

# cache dir root
CacheRoot "/var/www/proxy"
# max cache storage
CacheSize 50000000
# hour: every 4 hour
CacheGcInterval 4
# max page expire time: hour
CacheMaxExpire 240
# Expire time = (now - last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# defalt expire tag: hour
CacheDefaultExpire 1
# force complete after precent of content retrived: 60-90%
CacheForceCompletion 80

CustomLog /usr/local/apache/logs/dev_access_log combined
</VirtualHost>

 

ZSquid的反向代理加速实?/strong>

Squid是一个更专用的代理服务器Q性能和效率会比Apache的mod_proxy高很多?br /> 如果需要combined格式日志补丁Q?br /> http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html

squid的编译:
./configure --enable-useragent-log  --enable-referer-log --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese English" --disable-internal-dns 
make
#make install
#cd /usr/local/squid
make dir cache
chown squid.squid *
vi /usr/local/squid/etc/squid.conf

?etc/hosts中:加入内部的DNS解析Q比如:
192.168.0.4 www.chedong.com
192.168.0.4 news.chedong.com
192.168.0.3 bbs.chedong.com

---------------------cut here----------------------------------
# visible name
visible_hostname cache.example.com

# cache config: space use 1G and memory use 256M
cache_dir ufs /usr/local/squid/cache 1024 16 256
cache_mem 256 MB
cache_effective_user squid
cache_effective_group squid


http_port 80
httpd_accel_host virtual
httpd_accel_single_host off
httpd_accel_port 80
httpd_accel_uses_host_header on
httpd_accel_with_proxy on

# accelerater my domain only
acl acceleratedHostA dstdomain .example1.com
acl acceleratedHostB dstdomain .example2.com
acl acceleratedHostC dstdomain .example3.com
# accelerater http protocol on port 80
acl acceleratedProtocol protocol HTTP
acl acceleratedPort port 80
# access arc
acl all src 0.0.0.0/0.0.0.0

# Allow requests when they are to the accelerated machine AND to the
# right port with right protocol
http_access allow acceleratedProtocol acceleratedPort acceleratedHostA
http_access allow acceleratedProtocol acceleratedPort acceleratedHostB
http_access allow acceleratedProtocol acceleratedPort acceleratedHostC

# logging
emulate_httpd_log on
cache_store_log none

# manager
acl manager proto cache_object
http_access allow manager all
cachemgr_passwd pass all


----------------------cut here---------------------------------

创徏~存目录Q?br /> /usr/local/squid/sbin/squid -z

启动squid
/usr/local/squid/sbin/squid

停止squidQ?br /> /usr/local/squid/sbin/squid -k shutdown

启用新配|:
/usr/local/squid/sbin/squid -k reconfig

通过crontab每天0Ҏ?轮@日志Q?br /> 0 0 * * * (/usr/local/squid/sbin/squid -k rotate)

 

 

可缓存的动态页面设?/strong>

什么样的页面能够比较好的被~存服务器缓存呢Q如果返回内容的HTTP HEADER中有"Last-Modified"?Expires"相关声明Q比如:
Last-Modified: Wed, 14 May 2003 13:06:17 GMT
Expires: Fri, 16 Jun 2003 13:06:17 GMT
前端~存服务器在期间会将生成的页面缓存在本地Q硬盘或者内存中Q直至上q页面过期?br />
因此Q一个可~存的页面:
  • 面必须包含Last-Modified: 标记
    一般纯静态页面本w都会有Last-Modified信息Q动态页面需要通过函数强制加上Q比如在PHP中:
    // always modified now
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

  • 必须有Expires或Cache-Control: max-age标记讄面的过期时_
    对于静态页面,通过apache的mod_expiresҎ面的MIMEcd讄~存周期Q比如图片缺省是1个月QHTML面~省?天等?br /> <IfModule mod_expires.c>
        ExpiresActive on
        ExpiresByType image/gif "access plus 1 month"
        ExpiresByType text/css "now plus 2 day"
        ExpiresDefault "now plus 1 day"
    </IfModule>

    对于动态页面,则可以直接通过写入HTTPq回的头信息Q比如对于新闻首index.php可以?0分钟Q而对于具体的一条新闻页面可能是1天后q期。比如:在php中加入了1个月后过期:
    // Expires one month later
    header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 30). " GMT");

  • 如果服务器端有基于HTTP的认证,必须有Cache-Control: public标记Q允许前?
ASP应用的缓存改?首先在公用的包含文g?比如include.asp)加入以下公用函数Q?

<%
' Set Expires Header in minutes
Function SetExpiresHeader(ByVal minutes)
    ' set Page Last-Modified Header:
    ' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)
    Response.AddHeader "Last-Modified", DateToHTTPDate(Now())
   
    ' The Page Expires in Minutes
    Response.Expires = minutes
   
    ' Set cache control to externel applications
    Response.CacheControl = "public"
End Function

' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)
Function DateToHTTPDate(ByVal OleDATE)
  Const GMTdiff = #08:00:00#
  OleDATE = OleDATE - GMTdiff
  DateToHTTPDate = engWeekDayName(OleDATE) & _
    ", " & Right("0" & Day(OleDATE),2) & " " & engMonthName(OleDATE) & _
    " " & Year(OleDATE) & " " & Right("0" & Hour(OleDATE),2) & _
    ":" & Right("0" & Minute(OleDATE),2) & ":" & Right("0" & Second(OleDATE),2) & " GMT"
End Function

Function engWeekDayName(dt)
    Dim Out
    Select Case WeekDay(dt,1)
        Case 1:Out="Sun"
        Case 2:Out="Mon"
        Case 3:Out="Tue"
        Case 4:Out="Wed"
        Case 5:Out="Thu"
        Case 6:Out="Fri"
        Case 7:Out="Sat"
    End Select
    engWeekDayName = Out
End Function

Function engMonthName(dt)
    Dim Out
    Select Case Month(dt)
        Case 1:Out="Jan"
        Case 2:Out="Feb"
        Case 3:Out="Mar"
        Case 4:Out="Apr"
        Case 5:Out="May"
        Case 6:Out="Jun"
        Case 7:Out="Jul"
        Case 8:Out="Aug"
        Case 9:Out="Sep"
        Case 10:Out="Oct"
        Case 11:Out="Nov"
        Case 12:Out="Dec"
    End Select
    engMonthName = Out
End Function
%>

然后在具体的面中,比如index.asp和news.asp?#8220;最上面”加入以下代码QHTTP Header

<!--#include file="../include.asp"-->
<%
'面被讄20分钟后过?br /> SetExpiresHeader(20)
%>


如何查目前站炚w面的可缓存性(CacheablilityQ呢Q可以参考以?个站点上的工P
http://www.ircache.net/cgi-bin/cacheability.py


附:SQUID性能试试验

phpMan.php是一个基于php的man page serverQ每个man page需要调用后台的man命o和很多页面格式化工具Q系l负载比较高Q提供了Cache Friendly的URLQ以下是针对同样的页面的性能试资料Q?br /> 试环境QRedhat 8 on Cyrix 266 / 192M Mem
试E序Q用apache的ab(apache benchmark)Q?br /> 试条gQ请?0ơ,q发50个连?br /> 试目Q直接通过apache 1.3 (80端口) vs squid 2.5(8000端口Q加?0端口)

试1Q无CACHE?0端口动态输出:
ab -n 100 -c 10 http://www.chedong.com:81/phpMan.php/man/kill/1
This is ApacheBench, Version 1.3d <$Revision: 1.1 $> apache-1.3
Copyright © 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright © 1998-2001 The Apache Group, http://www.apache.org/

Benchmarking localhost (be patient).....done
Server Software:        Apache/1.3.23                                     
Server Hostname:        localhost
Server Port:            80

Document Path:          /phpMan.php/man/kill/1
Document Length:        4655 bytes

Concurrency Level:      5
Time taken for tests:   63.164 seconds
Complete requests:      50
Failed requests:        0
Broken pipe errors:     0
Total transferred:      245900 bytes
HTML transferred:       232750 bytes
Requests per second:    0.79 [#/sec] (mean)
Time per request:       6316.40 [ms] (mean)
Time per request:       1263.28 [ms] (mean, across all concurrent requests)
Transfer rate:          3.89 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    29  106.1      0   553
Processing:  2942  6016 1845.4   6227 10796
Waiting:     2941  5999 1850.7   6226 10795
Total:       2942  6045 1825.9   6227 10796

Percentage of the requests served within a certain time (ms)
  50%   6227
  66%   7069
  75%   7190
  80%   7474
  90%   8195
  95%   8898
  98%   9721
  99%  10796
 100%  10796 (last request)

试2QSQUID~存输出
/home/apache/bin/ab -n50 -c5 "http://localhost:8000/phpMan.php/man/kill/1"
This is ApacheBench, Version 1.3d <$Revision: 1.1 $> apache-1.3
Copyright © 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright © 1998-2001 The Apache Group, http://www.apache.org/

Benchmarking localhost (be patient).....done
Server Software:        Apache/1.3.23                                     
Server Hostname:        localhost
Server Port:            8000

Document Path:          /phpMan.php/man/kill/1
Document Length:        4655 bytes

Concurrency Level:      5
Time taken for tests:   4.265 seconds
Complete requests:      50
Failed requests:        0
Broken pipe errors:     0
Total transferred:      248043 bytes
HTML transferred:       232750 bytes
Requests per second:    11.72 [#/sec] (mean)
Time per request:       426.50 [ms] (mean)
Time per request:       85.30 [ms] (mean, across all concurrent requests)
Transfer rate:          58.16 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     1    9.5      0    68
Processing:     7    83  537.4      7  3808
Waiting:        5    81  529.1      6  3748
Total:          7    84  547.0      7  3876

Percentage of the requests served within a certain time (ms)
  50%      7
  66%      7
  75%      7
  80%      7
  90%      7
  95%      7
  98%      8
  99%   3876
 100%   3876 (last request)

l论QNo Cache / Cache = 6045 / 84 = 70
l论Q对于可能被~存h的页面,服务器速度可以?个数量的提高,因ؓSQUID是把~存面攑֜内存里的Q因此几乎没有硬盘I/O操作Q?br />
节Q?br />
  • 大访问量的网站应可能将动态网는成静态页面作为缓存发布,甚至对于搜烦引擎q样的动态应用来_~存机制也是非常非常重要的?
  • 在动态页面中利用HTTP Header定义~存更新{略?
  • 利用~存服务器获得额外的配置和安全?
  • 日志非常重要QSQUID日志~省不支持COMBINED日志Q但对于需要REFERER日志的这个补丁非帔R要:http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html

参考资料:

HTTP代理~存
http://vancouver-webpages.com/proxy.html

可缓存的面设计
http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html

相关RFC文档Q?br />

 

可缓存性检查:
http://www.web-caching.com/cacheability.html

~存设计要素Q?br /> http://vancouver-webpages.com/CacheNow/detail.html

ZOPE上的几篇使用APACHE MOD_PROXY MOD_GZIP加速的文档
http://www.zope.org/Members/anser/apache_zserver/
http://www.zope.org/Members/softsign/ZServer_and_Apache_mod_gzip
http://www.zope.org/Members/rbeer/caching


本文转自Q?font style="background-color: #d3ebd8">http://www.phpe.net/articles/366.shtml

]]>
վ֩ģ壺 91۲˽˳ӰԺ| 鶹69Ƶ| һѹۿձwwwƵ| ɫר߹ۿ| 4ѵַ| VAĻëƬ| ɫվ| 㽶Ƶ| ۺһƷ| ۺϳ91Ʒ| Ƶѹۿ97| 999ƵƷѲŹۿ| һŮѲ| ޾ƷGVͬ| ޳ӰԺ߹ۿ| wwwѸƵ| ޹˾þۺ| ʥһ| ÿĵӰվһ| ޹һ | ձ2019߹ۿ| ½޾Ʒ| ˾Ʒձר| һĻþ| ˾þþƷҹ| ѹۿһëƬ| ŮƵվ| Ƶ| ƬĻӰ| AVۺɫһ| ƷƵ߹ۿ| av鶹aӰ| ŷ޾Ʒһ| ҹС˵69| ޵av| ޾Ʒ| 91޹˾þþƷ | þùƷѿ| ĻѹۿƵ| һëƬѹۿ| ޿һ|