<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://miaomin.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fmiaomin.spaces.live.com%2fcategory%2fPHP__xa5CMS%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>苗苗 合作 交流: PHP/CMS</title><description /><link>http://miaomin.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catPHP__xa5CMS</link><language>en-US</language><pubDate>Mon, 03 Sep 2007 03:40:18 GMT</pubDate><lastBuildDate>Mon, 03 Sep 2007 03:40:18 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://miaomin.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-8913911617972053559</live:id><live:alias>miaomin</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>用squid再次疯狂加速你的web</title><link>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!290.entry</link><description>在之前的一篇Blog里提及到了&lt;a href="http://www.squid-cache.org/"&gt;squid&lt;/a&gt;这个新名词，在Google里搜索了一下，列出一点详细资料，以备补充之需。&lt;br&gt;&lt;h3&gt;用squid再次疯狂加速你的web&lt;/h3&gt;

&lt;p&gt;昨天给大家介绍了&lt;a href="http://www.5ilinux.com/blog/archives/000075.html"&gt;用tmpfs加速你的linux服务器&lt;/a&gt;，我觉得还是不够过瘾，今天趁热打铁继续学了一招，用squid来疯狂加速你的web网站，对自己web网站速度不满意的话，不妨试验一下我下面推荐的方法。

&lt;p&gt;首先你得有squid代理服务器，怎么装我就不讲了，用redhat的直接使用她的rpm安装就行。&lt;br&gt;
配置squid的配置文件，使其支持httpd加速器工作方式。&lt;br&gt;
编辑“squid.conf”文件（vi /etc/squid/squid.conf），增加下面内容：

&lt;p&gt;http_port 80&lt;br&gt;
icp_port 0&lt;br&gt;
acl QUERY urlpath_regex cgi-bin ?&lt;br&gt;
no_cache deny QUERY&lt;br&gt;
cache_mem 16 MB&lt;br&gt;
cache_dir ufs /tmp 256 16 256&lt;br&gt;
log_icp_queries off&lt;br&gt;
buffered_logs on&lt;br&gt;
emulate_httpd_log on&lt;br&gt;
redirect_rewrites_host_header off&lt;br&gt;
half_closed_clients off&lt;br&gt;
acl all src 0.0.0.0/0.0.0.0&lt;br&gt;
http_access allow all&lt;br&gt;
cache_mgr admin&lt;br&gt;
cache_effective_user squid&lt;br&gt;
cache_effective_group squid&lt;br&gt;
httpd_accel_host 210.51.0.124&lt;br&gt;
httpd_accel_port 81

&lt;p&gt;&lt;br&gt;
http_port”参数指定Squid监听浏览器客户请求的端口号，这里当然是80了

&lt;p&gt;cache_dir ufs /tmp 256 16 256

&lt;p&gt;cache_dir参数设定使用的存储系统的类型。一般情况下都类型应该是ufs，目录应该是“/tmp”，在该目录下使用的缓冲值为256MB，允许在“/tmp”下创建的第一级子目录数为16，每个第一级子目录下可以创建的第二级子目录数量为256

&lt;p&gt;&lt;br&gt;
选项“httpd_accel_host”和“httpd_accel_port”定义了真正的Web服务器的主机名和端口号。在这里的配置中，真正的
HTTP服务器运行在IP地址为210.51.0.124 （www.5ilinux.com）的主机上，运行端口为81。

&lt;p&gt;ok，squid设置完毕。

&lt;p&gt;接着设置apache，很简单，只要把你的httpd监听端口设置成81就成，然后重启你的apache。

&lt;p&gt;接着重启你的squid服务，现在你访问你的web网站，已经是用了squid的http加速工作模式，你可以通过看squid的log日记看到他的运行情况。

&lt;p&gt;我还是没搞明白怎么配合使用虚拟主机，以上方法只实现一个域名，不知大家有没有做过虚拟主机squid加速，提点一下吧&lt;p&gt;回复

&lt;div&gt;
&lt;p&gt;squid配置虚拟主机还是很简单的，仔细看说明文档&lt;br&gt;
1、httpd_accel_host virtual&lt;br&gt;
2、httpd_accel_uses_host_header on（说明里有，仔细看！！！）&lt;br&gt;
最关键的是要在apache里改点东西：）&lt;br&gt;
1、port 8080（因为squid占用了80，或者只是举个例子）&lt;br&gt;
2、NameVirtualHost x.x.x.x:8080（一定要和apache本身的port一样，不让加速后的所有网站都将指向默认站点）&lt;br&gt;
不对之处请指正，本人一直都这么用，没出现任何问题
&lt;span&gt;Posted by: &lt;a href="mailto:ryu@cenbow.com"&gt;andyryu&lt;/a&gt; at June 23, 2004 04:30 PM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;我也很想知道怎么可以配合使用虚拟主机，实现多个域名，请指教
&lt;span&gt;Posted by: &lt;a href="mailto:gzaurora@tom.com"&gt;aurora&lt;/a&gt; at May 10, 2004 10:55 AM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;张汪：&lt;br&gt;
找一个你能控制的在公网的机器，装个代理就可以，当然你要访问类似bbc，voa等本身就被屏蔽的网站那就得找一些国外得代理才行，国内也有，但很少。
&lt;span&gt;Posted by: &lt;a href="http://www.5ilinux.com/cgi-bin/mt-comments.cgi?__mode=red&amp;amp;id=496"&gt;frank&lt;/a&gt; at April 26, 2004 10:39 PM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;我用的是校园网，有的网站可以上，但有的却不能？能不能告诉我怎么绕过服务器？谢谢？
&lt;span&gt;Posted by: &lt;a href="mailto:tonygun@163.com"&gt;张汪　&lt;/a&gt; at April 24, 2004 11:33 PM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;偶然发现chinadns使用了 squid 来集群给客户提供缓存服务&lt;br&gt;
偶然的错误信息发现了页面包含如下信息&lt;br&gt;
squid/2.5.STABLE4&lt;br&gt;
呵，证明他们已经成功利用这个软件解决了虚拟主机的问题
&lt;span&gt;Posted by: &lt;a href="http://www.5ilinux.com/cgi-bin/mt-comments.cgi?__mode=red&amp;amp;id=447"&gt;笑容&lt;/a&gt; at April  7, 2004 11:54 AM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;我访问国外就用代理，平时都不用代理，服务器随时调整的~ &lt;br&gt;
嘿嘿
&lt;span&gt;Posted by: &lt;a href="mailto:kabaiese@yahoo.com.cn"&gt;kabaiese&lt;/a&gt; at March 14, 2004 04:14 AM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;可能跟你的squid配置有关系，我这边就很快，但我由于没有解决虚拟域名的问题，所以忍痛割爱了：（
&lt;span&gt;Posted by: &lt;a href="http://www.5ilinux.com/cgi-bin/mt-comments.cgi?__mode=red&amp;amp;id=250"&gt;frank&lt;/a&gt; at March  3, 2004 04:23 PM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;我又一问题，我用这种加速模式运行的时候，当访问量大时我得到网页的内容会很慢，但是这时如果我绕过squid，直接访问apache的81端口获取网页就很快，这是为什么？难道squid性能问题？
&lt;span&gt;Posted by: &lt;a href="mailto:freenetwalker@163.com"&gt;freenetwalker&lt;/a&gt; at March  3, 2004 09:42 AM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;To:frank:  sohu用的squid是跑在另外的主机上吧？？&lt;br&gt;
还有我怎么觉得加入虚拟主机对同一个站点好象没什么用处……en，个人之言:P&lt;br&gt;

&lt;span&gt;Posted by: &lt;a href="mailto:kevinasuka@126.com"&gt;kana&lt;/a&gt; at January 16, 2004 03:27 PM&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;有些问题很难回答，至少我对mysql的性能调整还不是很熟悉，

&lt;p&gt;但我知道sohu好像就是用squid来加速它的网站的。

&lt;p&gt;我说的虚拟主机跟squid配合还是挺麻烦的，至少我是没配出，你说的是普通的配置，反正我没配置出来不知为什么？？
&lt;span&gt;Posted by: &lt;a href="http://www.5ilinux.com/cgi-bin/mt-comments.cgi?__mode=red&amp;amp;id=50"&gt;frank&lt;/a&gt; at January 14, 2004 05:31 PM&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;几个疑虑:

&lt;p&gt;1.如果网站是基于数据库的话，比如mysql，因为数据库有最大化利用内存的&lt;br&gt;
开关，大多的数据其实已经在内存里了，这样做是不是在效率上反而有所降低呢。

&lt;p&gt;2.访问量大的站点上好像不怎么合适，因为apache这样的服务器软件软件是经过大量的站点验证其性能的，如果这中间再经过一个代理层，这个代理层的IO性能怎么样不能保证，有时候反而成为速度瓶颈。如果访问量不大又好像没有必要这么作了。

&lt;p&gt;&lt;br&gt;
3.虚拟主机在apache，dns里设置好了，这里只是个代理转发并缓冲的机制，&lt;br&gt;
应该不要特别设置吧？

个人之见，未经验证，还请指教&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8913911617972053559&amp;page=RSS%3a+%e7%94%a8squid%e5%86%8d%e6%ac%a1%e7%96%af%e7%8b%82%e5%8a%a0%e9%80%9f%e4%bd%a0%e7%9a%84web&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=miaomin.spaces.live.com&amp;amp;GT1=miaomin"&gt;</description><comments>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!290.entry#comment</comments><guid isPermaLink="true">http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!290.entry</guid><pubDate>Mon, 03 Apr 2006 06:22:53 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://miaomin.spaces.live.com/blog/cns!844B6C9C838C59C9!290/comments/feed.rss</wfw:commentRss><wfw:comment>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!290.entry#comment</wfw:comment><dcterms:modified>2006-04-03T06:22:53Z</dcterms:modified></item><item><title>基于反向代理的Web缓存加速——可缓存的CMS系统设计</title><link>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!289.entry</link><description>作者:车东 来源:chedong.com&lt;br&gt;&lt;em&gt;&lt;br&gt;对于一个日访问量达到百万级的网站来说，速度很快就成为一个瓶颈。除了优化内容发布系统的应用本身外，如果能把不需要实时更新的动态页面的
输出结果转化成静态网页来发布，速度上的提升效果将是显著的，因为一个动态页面的速度往往会比静态页面慢2－10倍，而静态网页的内容如果能被缓存在内存
里，访问&lt;a href="http://www.phpe.net/articles/366.shtml#test"&gt;&lt;u&gt;速度甚至会比原有动态网页有2－3个数量级的提高&lt;/u&gt;&lt;/a&gt;&lt;/em&gt;。&lt;br&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.phpe.net/articles/366.shtml#compare"&gt;&lt;u&gt;动态缓存和静态缓存的比较&lt;/u&gt;&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.phpe.net/articles/366.shtml#site"&gt;&lt;u&gt;基于反向代理加速的站点规划&lt;/u&gt;&lt;/a&gt;&lt;br&gt;
&lt;li&gt;&lt;a href="http://www.phpe.net/articles/366.shtml#apache"&gt;&lt;u&gt;基于apache mod_proxy的反向代理加速实现&lt;/u&gt;&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.phpe.net/articles/366.shtml#squid"&gt;&lt;u&gt;基于squid的反向代理加速实现&lt;/u&gt;&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.phpe.net/articles/366.shtml#page"&gt;&lt;u&gt;面向缓存的页面设计&lt;/u&gt;&lt;/a&gt; &lt;/ul&gt;
&lt;p&gt;后台的内容管理系统的页面输出遵守可缓存的设计，这样就可以把性能问题交给前台的缓存服务器来解决了，从而大大简化CMS系统本身的复杂程度。
&lt;p&gt; 
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;strong&gt;静态缓存和动态缓存的比较&lt;/strong&gt; 
&lt;p&gt;静态页面的缓存可能有2种形式：其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。
&lt;ol&gt;&lt;li&gt;静态缓存：是在新内容发布的同时就立刻生成相应内容的静态页面，比如：2003年3月22日，管理员通过后台内容管理界面录入一篇文章后，就立刻
生成http://www.chedong.com/tech/2003/03/22/001.html这个静态页面，并同步更新相关索引页上的链接。&lt;br style="font-style:italic"&gt;&lt;br&gt;
&lt;li&gt;动态缓存：是在新内容发布以后，并不预先生成相应的静态页面，直到对相应内容发出请求时，如果前台缓存服务器找不到相应缓存，就向后台内容管理服务器发出请求，后台系统会生成相应内容的静态页面，用户第一次访问页面时可能会慢一点，但是以后就是直接访问缓存了。&lt;br&gt;&lt;span style="font-style:italic"&gt;&lt;br&gt;如果去ZDNet等国外网站会发现他们使用的基于&lt;/span&gt;&lt;a style="font-style:italic" href="http://www.vignette.com/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Vignette&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="font-style:italic"&gt;内容管理系统都有这样的页面名称：0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数：&lt;/span&gt;&lt;br style="font-style:italic"&gt;&lt;span style="font-style:italic"&gt;第一次访问找不到页面后，相当于会在服务器端产生一个doc_type= 0&amp;amp;doc_id=22342566&amp;amp;doc_template=300458的查询，&lt;/span&gt;&lt;br style="font-style:italic"&gt;&lt;span style="font-style:italic"&gt;而查询结果会生成的缓存的静态页面： 0,22342566,300458.html&lt;/span&gt;&lt;br&gt;&lt;/ol&gt;
&lt;p&gt;静态缓存的缺点：
&lt;ul&gt;&lt;li&gt;复杂的触发更新机制：这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说，页面之间的逻辑引用关系就成为
一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中，在静态缓存模式中，每发一篇新文章，除了这篇新闻内容本
身的页面外，还需要系统通过触发器生成多个新的相关静态页面，这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。 &lt;li&gt;旧内容的批量更新： 通过静态缓存发布的内容，对于以前生成的静态页面的内容很难修改，这样用户访问旧页面时，新的模板根本无法生效。 &lt;/ul&gt;
&lt;p&gt;在动态缓存模式中，每个动态页面只需要关心，而相关的其他页面能自动更新，从而大大减少了设计相关页面更新触发器的需要。&lt;br&gt;
&lt;p&gt;&lt;span style="font-style:italic"&gt;以前做小型应用的时候也用过类似方式：应用首次访问以后将数据库的查询结果
在本地存成一个文件，下次请求时先检查本地缓存目录中是否有缓存文件，从而减少对后台数据库的访问。虽然这样做也能承载比较大的负载，但这样的内容管理和
缓存管理一体的系统是很难分离的，而且数据完整性也不是很好保存，内容更新时，应用需要把相应内容的的缓存文件删除。但是这样的设计在缓存文件很多的时候
往往还需要将缓存目录做一定的分布，否则一个目录下的文件节点超过3000，rm *都会出错。&lt;/span&gt;&lt;br&gt;
&lt;p&gt;这时候，系统需要再次分工，把复杂的内容管理系统分解成：内容输入和缓存这2个相对简单的系统实现。&lt;br&gt;
&lt;ul&gt;&lt;li&gt;后台：内容管理系统，专心的将内容发布做好，比如：复杂的工作流管理，复杂的模板规则等…… 
&lt;li&gt;前台：页面的缓存管理则可以使用缓存系统实现&lt;br&gt;&lt;/ul&gt;&lt;pre&gt;&lt;a href="http://www.phpe.net/uploads/images/article_11_2559.gif"&gt;&lt;img alt="点击查看原图" src="http://www.phpe.net/uploads/images/article_11_2559.gif" align=middle border=0 hspace=3 vspace=3&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;所以分工后：内容管理和缓存管理2者，无论哪一方面可选的余地都是非常大的：软件（比如前台80端口使用SQUID对后台8080的内容发布管理系统进行缓存），缓存硬件，甚至交给&lt;a href="http://www.akamai.com/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;akamai&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;这样的专业服务商。&lt;br&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; 
&lt;p&gt;&lt;strong&gt;面向缓存的站点规划&lt;/strong&gt;一个利用SQUID对多个站点进行做WEB加速http acceleration方案：&lt;br&gt;&lt;br&gt;原先一个站点的规划可能是这样的：&lt;br&gt;200.200.200.207 www.chedong.com &lt;br&gt;200.200.200.208 news.chedong.com &lt;br&gt;200.200.200.209 bbs.chedong.com &lt;br&gt;200.200.200.205 images.chedong.com&lt;br&gt;&lt;br&gt;面向缓存服务器的设计中：所有站点都通过外部DNS指向到同一个IP：200.200.200.200/201这2台缓存服务器上（使用2台是为了冗余备份） &lt;a href="http://www.phpe.net/uploads/images/article_11_2047.gif"&gt;&lt;img alt="点击查看原图" src="http://www.phpe.net/uploads/images/article_11_2047.gif" align=middle border=0 hspace=3 vspace=3&gt;&lt;/a&gt;&lt;br&gt;工作原理：&lt;br&gt;外部请求过来时，设置缓存根据配置文件进行转向解析。这样，服务器请求就可以转发到我们指定的内部地址上。&lt;br&gt;&lt;br&gt;在处理多虚拟主机转向方面：mod_proxy比squid要简单一些：可以把不同服务转向后后台多个IP的不同端口上。&lt;br&gt;而squid只能通过禁用DNS解析，然后根据本地的/etc/hosts文件根据请求的域名进行地址转发，后台多个服务器必须使用相同的端口。&lt;br&gt;&lt;br&gt;使用反向代理加速，我们不仅可以得到性能上的提升，而且还能获得额外的安全性和配置的灵活度：&lt;br&gt;
&lt;ul&gt;&lt;li&gt;配置灵活性提高：可以自己在内部服务器上控制后台服务器的DNS解析，当需要在服务器之间做迁移调整时，就不用大量修改外部DNS配置了，只需要修改内部DNS实现服务的调整。 
&lt;li&gt;数据安全性增加：所有后台服务器可以很方便的被保护在防火墙内。 
&lt;li&gt;后台应用设计复杂程度降低：原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器
bbs.chedong.com分离，在反向代理加速模式中，所有前台请求都通过缓存服务器：实际上就都是静态页面，这样，应用设计时就不用考虑图片和应
用本身分离了，也大大降低了后台内容发布系统设计的复杂程度，由于数据和应用都存放在一起，也方便了文件系统的维护和管理。&lt;/ul&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; 
&lt;p&gt;&lt;strong&gt;基于Apache mod_proxy的反向代理缓存加速实现&lt;/strong&gt;Apache包含了mod_proxy模块，可以用来实现代理服务器，针对后台服务器的反向加速&lt;br&gt;&lt;br&gt;安装apache 1.3.x 编译时：&lt;br&gt;--enable-shared=max --enable-module=most&lt;br&gt;&lt;br&gt;&lt;span style="font-style:italic"&gt;注：Apache 2.x中mod_proxy已经被分离成mod_proxy和mod_cache：同时mod_cache有基于文件和基于内存的不同实现&lt;/span&gt;&lt;br&gt;&lt;br&gt;创建/var/www/proxy，设置apache服务所用户可写&lt;br&gt;&lt;br&gt;mod_proxy配置样例：反相代理缓存＋缓存&lt;br&gt;架设前台的www.example.com反向代理后台的www.backend.com的8080端口服务。&lt;br&gt;修改：httpd.conf&lt;br&gt;&amp;lt;VirtualHost *&amp;gt;&lt;br&gt;ServerName www.example.com&lt;br&gt;ServerAdmin admin@example.com&lt;br&gt;&lt;br&gt;# reverse proxy setting&lt;br&gt;ProxyPass / http://www.backend.com:8080/&lt;br&gt;ProxyPassReverse / http://www.backend.com:8080/&lt;br&gt;&lt;br&gt;# cache dir root&lt;br&gt;CacheRoot &amp;quot;/var/www/proxy&amp;quot;&lt;br&gt;# max cache storage&lt;br&gt;CacheSize 50000000&lt;br&gt;# hour: every 4 hour &lt;br&gt;CacheGcInterval 4&lt;br&gt;# max page expire time: hour&lt;br&gt;CacheMaxExpire 240&lt;br&gt;# Expire time = (now - last_modified) * CacheLastModifiedFactor &lt;br&gt;CacheLastModifiedFactor 0.1&lt;br&gt;# defalt expire tag: hour&lt;br&gt;CacheDefaultExpire 1&lt;br&gt;# force complete after precent of content retrived: 60-90%&lt;br&gt;CacheForceCompletion 80&lt;br&gt;&lt;br&gt;CustomLog /usr/local/apache/logs/dev_access_log combined&lt;br&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br&gt;&lt;br&gt;
&lt;h2&gt;&lt;a&gt;&lt;/a&gt; &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;基于Squid的反向代理加速实现&lt;/strong&gt;Squid是一个更专用的代理服务器，性能和效率会比Apache的mod_proxy高很多。&lt;br&gt;如果需要combined格式日志补丁：&lt;br&gt;http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html&lt;br&gt;&lt;br&gt;squid的编译：&lt;br&gt;./configure
--enable-useragent-log  --enable-referer-log
--enable-default-err-language=Simplify_Chinese
--enable-err-languages=&amp;quot;Simplify_Chinese English&amp;quot;
--disable-internal-dns  &lt;br&gt;make&lt;br&gt;#make install&lt;br&gt;#cd /usr/local/squid&lt;br&gt;make dir cache&lt;br&gt;chown squid.squid *&lt;br&gt;vi /usr/local/squid/etc/squid.conf&lt;br&gt;&lt;br&gt;在/etc/hosts中：加入内部的DNS解析，比如：&lt;br&gt;192.168.0.4 www.chedong.com &lt;br&gt;192.168.0.4 news.chedong.com&lt;br&gt;192.168.0.3 bbs.chedong.com&lt;br&gt;&lt;br&gt;---------------------cut here----------------------------------&lt;br&gt;# visible name&lt;br&gt;visible_hostname cache.example.com&lt;br&gt;&lt;br&gt;# cache config: space use 1G and memory use 256M&lt;br&gt;cache_dir ufs /usr/local/squid/cache 1024 16 256 &lt;br&gt;cache_mem 256 MB&lt;br&gt;cache_effective_user squid&lt;br&gt;cache_effective_group squid&lt;br&gt;&lt;br&gt;&lt;br&gt;http_port 80&lt;br&gt;httpd_accel_host virtual&lt;br&gt;httpd_accel_single_host off&lt;br&gt;httpd_accel_port 80&lt;br&gt;httpd_accel_uses_host_header on&lt;br&gt;httpd_accel_with_proxy on&lt;br&gt;&lt;br&gt;# accelerater my domain only&lt;br&gt;acl acceleratedHostA dstdomain .example1.com&lt;br&gt;acl acceleratedHostB dstdomain .example2.com&lt;br&gt;acl acceleratedHostC dstdomain .example3.com&lt;br&gt;# accelerater http protocol on port 80&lt;br&gt;acl acceleratedProtocol protocol HTTP&lt;br&gt;acl acceleratedPort port 80&lt;br&gt;# access arc&lt;br&gt;acl all src 0.0.0.0/0.0.0.0&lt;br&gt;&lt;br&gt;# Allow requests when they are to the accelerated machine AND to the&lt;br&gt;# right port with right protocol&lt;br&gt;http_access allow acceleratedProtocol acceleratedPort acceleratedHostA&lt;br&gt;http_access allow acceleratedProtocol acceleratedPort acceleratedHostB&lt;br&gt;http_access allow acceleratedProtocol acceleratedPort acceleratedHostC&lt;br&gt;&lt;br&gt;# logging&lt;br&gt;emulate_httpd_log on&lt;br&gt;cache_store_log none&lt;br&gt;&lt;br&gt;# manager&lt;br&gt;acl manager proto cache_object&lt;br&gt;http_access allow manager all&lt;br&gt;cachemgr_passwd pass all&lt;br&gt;&lt;br&gt;&lt;br&gt;----------------------cut here---------------------------------&lt;br&gt;&lt;br&gt;创建缓存目录：&lt;br&gt;/usr/local/squid/sbin/squid -z&lt;br&gt;&lt;br&gt;启动squid&lt;br&gt;/usr/local/squid/sbin/squid&lt;br&gt;&lt;br&gt;停止squid：&lt;br&gt;/usr/local/squid/sbin/squid -k shutdown&lt;br&gt;&lt;br&gt;启用新配置：&lt;br&gt;/usr/local/squid/sbin/squid -k reconfig&lt;br&gt;&lt;br&gt;通过crontab每天0点截断/轮循日志：&lt;br&gt;0 0 * * * (/usr/local/squid/sbin/squid -k rotate) &lt;br&gt;&lt;br&gt;

&lt;h2&gt;&lt;a&gt;&lt;/a&gt; &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;可缓存的动态页面设计&lt;/strong&gt;什么样的页面能够比较好的被缓存服务器缓存呢？如果返回内容的HTTP HEADER中有&amp;quot;Last-Modified&amp;quot;和&amp;quot;Expires&amp;quot;相关声明，比如：&lt;br&gt;Last-Modified: Wed, 14 May 2003 13:06:17 GMT&lt;br&gt;Expires: Fri, 16 Jun 2003 13:06:17 GMT&lt;br&gt;前端缓存服务器在期间会将生成的页面缓存在本地：硬盘或者内存中，直至上述页面过期。&lt;br&gt;&lt;br&gt;因此，一个可缓存的页面： 
&lt;ul&gt;&lt;li&gt;页面必须包含Last-Modified: 标记&lt;br&gt;一般纯静态页面本身都会有Last-Modified信息，动态页面需要通过函数强制加上，比如在PHP中：&lt;br&gt;// always modified now&lt;br&gt;header(&amp;quot;Last-Modified: &amp;quot; . gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;) . &amp;quot; GMT&amp;quot;);&lt;br&gt;&lt;br&gt;
&lt;li&gt;必须有Expires或Cache-Control: max-age标记设置页面的过期时间：&lt;br&gt;对于静态页面，通过apache的mod_expires根据页面的MIME类型设置缓存周期：比如图片缺省是1个月，HTML页面缺省是2天等。&lt;br&gt;&amp;lt;IfModule mod_expires.c&amp;gt; &lt;br&gt;    ExpiresActive on&lt;br&gt;    ExpiresByType image/gif &amp;quot;access plus 1 month&amp;quot;&lt;br&gt;    ExpiresByType text/css &amp;quot;now plus 2 day&amp;quot;&lt;br&gt;    ExpiresDefault &amp;quot;now plus 1 day&amp;quot;&lt;br&gt;&amp;lt;/IfModule&amp;gt;&lt;br&gt;&lt;br&gt;对于动态页面，则可以直接通过写入HTTP返回的头信息，比如对于新闻首页index.php可以是20分钟，而对于具体的一条新闻页面可能是1天后过期。比如：在php中加入了1个月后过期：&lt;br&gt;// Expires one month later&lt;br&gt;header(&amp;quot;Expires: &amp;quot; .gmdate (&amp;quot;D, d M Y H:i:s&amp;quot;, time() + 3600 * 24 * 30). &amp;quot; GMT&amp;quot;);&lt;br&gt;&lt;br&gt;
&lt;li&gt;如果服务器端有基于HTTP的认证，必须有Cache-Control: public标记，允许前台 &lt;/ul&gt;ASP应用的缓存改造 首先在公用的包含文件中(比如include.asp)加入以下公用函数： 
&lt;p&gt;&amp;lt;%&lt;br&gt;' Set Expires Header in minutes&lt;br&gt;Function SetExpiresHeader(ByVal minutes) &lt;br&gt;    ' set Page Last-Modified Header:&lt;br&gt;    ' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)&lt;br&gt;    Response.AddHeader &amp;quot;Last-Modified&amp;quot;, DateToHTTPDate(Now())&lt;br&gt;    &lt;br&gt;    ' The Page Expires in Minutes&lt;br&gt;    Response.Expires = minutes&lt;br&gt;    &lt;br&gt;    ' Set cache control to externel applications&lt;br&gt;    Response.CacheControl = &amp;quot;public&amp;quot;&lt;br&gt;End Function &lt;br&gt;&lt;br&gt;' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)&lt;br&gt;Function DateToHTTPDate(ByVal OleDATE)&lt;br&gt;  Const GMTdiff = #08:00:00#&lt;br&gt;  OleDATE = OleDATE - GMTdiff&lt;br&gt;  DateToHTTPDate = engWeekDayName(OleDATE) &amp;amp; _&lt;br&gt;    &amp;quot;, &amp;quot; &amp;amp; Right(&amp;quot;0&amp;quot; &amp;amp; Day(OleDATE),2) &amp;amp; &amp;quot; &amp;quot; &amp;amp; engMonthName(OleDATE) &amp;amp; _&lt;br&gt;    &amp;quot; &amp;quot; &amp;amp; Year(OleDATE) &amp;amp; &amp;quot; &amp;quot; &amp;amp; Right(&amp;quot;0&amp;quot; &amp;amp; Hour(OleDATE),2) &amp;amp; _&lt;br&gt;    &amp;quot;:&amp;quot; &amp;amp; Right(&amp;quot;0&amp;quot; &amp;amp; Minute(OleDATE),2) &amp;amp; &amp;quot;:&amp;quot; &amp;amp; Right(&amp;quot;0&amp;quot; &amp;amp; Second(OleDATE),2) &amp;amp; &amp;quot; GMT&amp;quot;&lt;br&gt;End Function &lt;br&gt;&lt;br&gt;Function engWeekDayName(dt)&lt;br&gt;    Dim Out&lt;br&gt;    Select Case WeekDay(dt,1)&lt;br&gt;        Case 1:Out=&amp;quot;Sun&amp;quot;&lt;br&gt;        Case 2:Out=&amp;quot;Mon&amp;quot;&lt;br&gt;        Case 3:Out=&amp;quot;Tue&amp;quot;&lt;br&gt;        Case 4:Out=&amp;quot;Wed&amp;quot;&lt;br&gt;        Case 5:Out=&amp;quot;Thu&amp;quot;&lt;br&gt;        Case 6:Out=&amp;quot;Fri&amp;quot;&lt;br&gt;        Case 7:Out=&amp;quot;Sat&amp;quot;&lt;br&gt;    End Select&lt;br&gt;    engWeekDayName = Out&lt;br&gt;End Function&lt;br&gt;&lt;br&gt;Function engMonthName(dt)&lt;br&gt;    Dim Out&lt;br&gt;    Select Case Month(dt)&lt;br&gt;        Case 1:Out=&amp;quot;Jan&amp;quot;&lt;br&gt;        Case 2:Out=&amp;quot;Feb&amp;quot;&lt;br&gt;        Case 3:Out=&amp;quot;Mar&amp;quot;&lt;br&gt;        Case 4:Out=&amp;quot;Apr&amp;quot;&lt;br&gt;        Case 5:Out=&amp;quot;May&amp;quot;&lt;br&gt;        Case 6:Out=&amp;quot;Jun&amp;quot;&lt;br&gt;        Case 7:Out=&amp;quot;Jul&amp;quot;&lt;br&gt;        Case 8:Out=&amp;quot;Aug&amp;quot;&lt;br&gt;        Case 9:Out=&amp;quot;Sep&amp;quot;&lt;br&gt;        Case 10:Out=&amp;quot;Oct&amp;quot;&lt;br&gt;        Case 11:Out=&amp;quot;Nov&amp;quot;&lt;br&gt;        Case 12:Out=&amp;quot;Dec&amp;quot;&lt;br&gt;    End Select&lt;br&gt;    engMonthName = Out&lt;br&gt;End Function&lt;br&gt;%&amp;gt;然后在具体的页面中，比如index.asp和news.asp的“最上面”加入以下代码：HTTP Header&lt;br&gt;&lt;br&gt;&amp;lt;!--#include file=&amp;quot;../include.asp&amp;quot;--&amp;gt;&lt;br&gt;&amp;lt;%&lt;br&gt;'页面将被设置20分钟后过期&lt;br&gt;SetExpiresHeader(20)&lt;br&gt;%&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;如何检查目前站点页面的可缓存性（Cacheablility）呢？可以参考以下2个站点上的工具：&lt;br&gt;&lt;a href="http://www.ircache.net/cgi-bin/cacheability.py"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.ircache.net/cgi-bin/cacheability.py&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;&lt;strong&gt;附：SQUID性能测试试验&lt;/strong&gt;phpMan.php是一个基于php的man page server，每个man page需要调用后台的man命令和很多页面格式化工具，系统负载比较高，提供了Cache Friendly的URL，以下是针对同样的页面的性能测试资料：&lt;br&gt;测试环境：Redhat 8 on Cyrix 266 / 192M Mem &lt;br&gt;测试程序：使用apache的ab(apache benchmark)：&lt;br&gt;测试条件：请求50次，并发50个连接&lt;br&gt;测试项目：直接通过apache 1.3 (80端口) vs squid 2.5(8000端口：加速80端口) &lt;br&gt;&lt;br&gt;测试1：无CACHE的80端口动态输出：&lt;br&gt;ab -n 100 -c 10 http://www.chedong.com:81/phpMan.php/man/kill/1&lt;br&gt;This is ApacheBench, Version 1.3d &amp;lt;$Revision: 1.1 $&amp;gt; apache-1.3&lt;br&gt;Copyright © 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/&lt;br&gt;Copyright © 1998-2001 The Apache Group, http://www.apache.org/&lt;br&gt;&lt;br&gt;Benchmarking localhost (be patient).....done&lt;br&gt;Server Software:        Apache/1.3.23                                     &lt;br&gt;Server Hostname:        localhost&lt;br&gt;Server Port:            80&lt;br&gt;&lt;br&gt;Document Path:          /phpMan.php/man/kill/1&lt;br&gt;Document Length:        4655 bytes&lt;br&gt;&lt;br&gt;Concurrency Level:      5&lt;br&gt;Time taken for tests:   63.164 seconds&lt;br&gt;Complete requests:      50&lt;br&gt;Failed requests:        0&lt;br&gt;Broken pipe errors:     0&lt;br&gt;Total transferred:      245900 bytes&lt;br&gt;HTML transferred:       232750 bytes&lt;br&gt;Requests per second:    0.79 [#/sec] (mean)&lt;br&gt;Time per request:       6316.40 [ms] (mean)&lt;br&gt;Time per request:       1263.28 [ms] (mean, across all concurrent requests)&lt;br&gt;Transfer rate:          3.89 [Kbytes/sec] received&lt;br&gt;&lt;br&gt;Connnection Times (ms)&lt;br&gt;              min  mean[+/-sd] median   max&lt;br&gt;Connect:        0    29  106.1      0   553&lt;br&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Processing:  2942  6016 1845.4   6227 10796&lt;/span&gt;&lt;br style="color:rgb(255, 0, 0)"&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Waiting:     2941  5999 1850.7   6226 10795&lt;/span&gt;&lt;br style="color:rgb(255, 0, 0)"&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Total:       2942  6045 1825.9   6227 10796&lt;/span&gt;&lt;br&gt;&lt;br&gt;Percentage of the requests served within a certain time (ms)&lt;br&gt;  50%   6227&lt;br&gt;  66%   7069&lt;br&gt;  75%   7190&lt;br&gt;  80%   7474&lt;br&gt;  90%   8195&lt;br&gt;  95%   8898&lt;br&gt;  98%   9721&lt;br&gt;  99%  10796&lt;br&gt; 100%  10796 (last request)&lt;br&gt;&lt;br&gt;测试2：SQUID缓存输出&lt;br&gt;/home/apache/bin/ab -n50 -c5 &amp;quot;http://localhost:8000/phpMan.php/man/kill/1&amp;quot;&lt;br&gt;This is ApacheBench, Version 1.3d &amp;lt;$Revision: 1.1 $&amp;gt; apache-1.3&lt;br&gt;Copyright © 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/&lt;br&gt;Copyright © 1998-2001 The Apache Group, http://www.apache.org/&lt;br&gt;&lt;br&gt;Benchmarking localhost (be patient).....done&lt;br&gt;Server Software:        Apache/1.3.23                                     &lt;br&gt;Server Hostname:        localhost&lt;br&gt;Server Port:            8000&lt;br&gt;&lt;br&gt;Document Path:          /phpMan.php/man/kill/1&lt;br&gt;Document Length:        4655 bytes&lt;br&gt;&lt;br&gt;Concurrency Level:      5&lt;br&gt;Time taken for tests:   4.265 seconds&lt;br&gt;Complete requests:      50&lt;br&gt;Failed requests:        0&lt;br&gt;Broken pipe errors:     0&lt;br&gt;Total transferred:      248043 bytes&lt;br&gt;HTML transferred:       232750 bytes&lt;br&gt;Requests per second:    11.72 [#/sec] (mean)&lt;br&gt;Time per request:       426.50 [ms] (mean)&lt;br&gt;Time per request:       85.30 [ms] (mean, across all concurrent requests)&lt;br&gt;Transfer rate:          58.16 [Kbytes/sec] received&lt;br&gt;&lt;br&gt;Connnection Times (ms)&lt;br&gt;              min  mean[+/-sd] median   max&lt;br&gt;Connect:        0     1    9.5      0    68&lt;br&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Processing:     7    83  537.4      7  3808&lt;/span&gt;&lt;br style="color:rgb(255, 0, 0)"&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Waiting:        5    81  529.1      6  3748&lt;/span&gt;&lt;br style="color:rgb(255, 0, 0)"&gt;&lt;span style="color:rgb(255, 0, 0)"&gt;Total:          7    84  547.0      7  3876&lt;/span&gt;&lt;br&gt;&lt;br&gt;Percentage of the requests served within a certain time (ms)&lt;br&gt;  50%      7&lt;br&gt;  66%      7&lt;br&gt;  75%      7&lt;br&gt;  80%      7&lt;br&gt;  90%      7&lt;br&gt;  95%      7&lt;br&gt;  98%      8&lt;br&gt;  99%   3876&lt;br&gt; 100%   3876 (last request)&lt;br&gt;&lt;br&gt;结论：No Cache / Cache = 6045 / 84 = 70&lt;br&gt;结论：对于可能被缓存请求的页面，服务器速度可以有2个数量级的提高，因为SQUID是把缓存页面放在内存里的（因此几乎没有硬盘I/O操作）。&lt;br&gt;&lt;br&gt;小节：&lt;br&gt;
&lt;ul&gt;&lt;li&gt;大访问量的网站应尽可能将动态网页生成静态页面作为缓存发布，甚至对于搜索引擎这样的动态应用来说，缓存机制也是非常非常重要的。 
&lt;li&gt;在动态页面中利用HTTP Header定义缓存更新策略。 
&lt;li&gt;利用缓存服务器获得额外的配置和安全性 
&lt;li&gt;日志非常重要：SQUID日志缺省不支持COMBINED日志，但对于需要REFERER日志的这个补丁非常重要：&lt;a href="http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&lt;/ul&gt;
&lt;p&gt;参考资料：&lt;br&gt;
&lt;p&gt;HTTP代理缓存&lt;br&gt;&lt;a href="http://vancouver-webpages.com/proxy.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://vancouver-webpages.com/proxy.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;p&gt;可缓存的页面设计&lt;br&gt;&lt;a href="http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;
&lt;p&gt;相关RFC文档：&lt;br&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;RFC 2616&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;: 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 13&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Caching) 
&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 14.9&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Cache-Control header) 
&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 14.21&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Expires header) 
&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 14.32&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Pragma: no-cache) is important if you are interacting with HTTP/1.0 caches 
&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.29"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 14.29&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Last-Modified) is the most common validation method 
&lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;section 3.11&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; (Entity Tags) covers the extra validation method &lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;可缓存性检查：&lt;br&gt;&lt;a href="http://www.web-caching.com/cacheability.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.web-caching.com/cacheability.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;缓存设计要素：&lt;br&gt;&lt;a href="http://vancouver-webpages.com/CacheNow/detail.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://vancouver-webpages.com/CacheNow/detail.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;ZOPE上的几篇使用APACHE MOD_PROXY MOD_GZIP加速的文档&lt;br&gt;&lt;a href="http://www.zope.org/Members/anser/apache_zserver/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.zope.org/Members/anser/apache_zserver/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.zope.org/Members/softsign/ZServer_and_Apache_mod_gzip"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.zope.org/Members/softsign/ZServer_and_Apache_mod_gzip&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.zope.org/Members/rbeer/caching"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://www.zope.org/Members/rbeer/caching&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8913911617972053559&amp;page=RSS%3a+%e5%9f%ba%e4%ba%8e%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e7%9a%84Web%e7%bc%93%e5%ad%98%e5%8a%a0%e9%80%9f%e2%80%94%e2%80%94%e5%8f%af%e7%bc%93%e5%ad%98%e7%9a%84CMS%e7%b3%bb%e7%bb%9f%e8%ae%be%e8%ae%a1&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=miaomin.spaces.live.com&amp;amp;GT1=miaomin"&gt;</description><comments>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!289.entry#comment</comments><guid isPermaLink="true">http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!289.entry</guid><pubDate>Mon, 03 Apr 2006 06:00:48 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://miaomin.spaces.live.com/blog/cns!844B6C9C838C59C9!289/comments/feed.rss</wfw:commentRss><wfw:comment>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!289.entry#comment</wfw:comment><dcterms:modified>2006-04-03T06:00:48Z</dcterms:modified></item><item><title>[PHP] php与mysql完成的分页类</title><link>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!161.entry</link><description>&lt;div&gt;&lt;font size=3&gt; 这个分页是上次发的java分页的基础，我是在php的基础上，完成的其他的分页，思想基本一样,把此函数改造后，才能适应真正的使用，样式的控制在do-while这个函数上&lt;br&gt;class page&lt;br&gt;{&lt;br&gt;var $user=&amp;quot;root&amp;quot;;&lt;br&gt;var $passwd=&amp;quot;&amp;quot;;&lt;br&gt;var $host=&amp;quot;127.0.0.1&amp;quot;;&lt;br&gt;var $port=&amp;quot;3306&amp;quot;;&lt;br&gt;var $dbname=&amp;quot;soohuo&amp;quot;;&lt;br&gt;//var $server=$this-&amp;gt;host.&amp;quot;:&amp;quot;.$this-&amp;gt;port;&lt;br&gt;var $page_num=30;//每页显示的条数&lt;br&gt;var $con;//库连接成功句柄&lt;br&gt;var $result;//查询成功句柄&lt;br&gt;var $page_sum;//总共的页数&lt;br&gt;function page($sql,$url)&lt;br&gt;{&lt;br&gt;$this-&amp;gt;db_connect();&lt;br&gt;$this-&amp;gt;get_page_sum($sql);&lt;br&gt;if(!isset($_GET[&amp;quot;page&amp;quot;])||$_GET[&amp;quot;page&amp;quot;]==0)&lt;br&gt;$page=1;&lt;br&gt;else&lt;br&gt;$page=$_GET[&amp;quot;page&amp;quot;];&lt;br&gt;$url=$url.&amp;quot;?page=&amp;quot;;&lt;br&gt;$foot=&amp;quot; &lt;/font&gt;
&lt;div align=center&gt;&lt;font size=3&gt;&amp;quot;;&lt;br&gt;if($page&amp;gt;1)&lt;br&gt;$foot=$foot.&amp;quot;&lt;/font&gt;&lt;a href="http://blog.csdn.net/sanshi0815/archive/2005/05/31/$url&amp;quot;.($page-1).&amp;quot;"&gt;&lt;u&gt;&lt;font color="#0000ff" size=3&gt;上一页&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size=3&gt;  &amp;quot;;&lt;br&gt;$foot=$foot.&amp;quot;当前是第$page 页&amp;quot;;&lt;br&gt;if($this-&amp;gt;page_sum&amp;gt;1&amp;amp;&amp;amp;$page&amp;lt;$this-&amp;gt;page_sum)&lt;br&gt;$foot=$foot.&amp;quot;  &lt;/font&gt;&lt;a href="http://blog.csdn.net/sanshi0815/archive/2005/05/31/$url&amp;quot;.($page+1).&amp;quot;"&gt;&lt;u&gt;&lt;font color="#0000ff" size=3&gt;下一页&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size=3&gt;&amp;quot;;&lt;br&gt;if($this-&amp;gt;page_sum&amp;gt;1)&lt;br&gt;{&lt;br&gt;$foot=$foot.&amp;quot; 跳到第 $i $i 页&amp;quot;;&lt;br&gt;}&lt;br&gt;$foot.=&amp;quot;&lt;/font&gt;&lt;/div&gt;&lt;font size=3&gt;&amp;quot;;&lt;br&gt;$start=($page-1)*$this-&amp;gt;page_num;&lt;br&gt;$end=$this-&amp;gt;page_num;&lt;br&gt;$sql1=$sql.&amp;quot; limit $start,$end&amp;quot;;&lt;br&gt;$this-&amp;gt;db_query($sql1);&lt;br&gt;$this-&amp;gt;get_page_head($sql);//page head&lt;br&gt;$this-&amp;gt;db_while();//page body&lt;br&gt;echo $foot;//page end&lt;br&gt;}&lt;br&gt;function db_while()&lt;br&gt;{&lt;br&gt;$result=$this-&amp;gt;result;&lt;br&gt;echo &amp;quot;ID号标题错误原因&amp;quot;;&lt;br&gt;while($row=mysql_fetch_array($result))&lt;br&gt;{&lt;br&gt;if($row[&amp;quot;up_oracle&amp;quot;]==2)&lt;br&gt;{&lt;br&gt;$error=&amp;quot;存在重复&amp;quot;;&lt;br&gt;}&lt;br&gt;if($row[&amp;quot;up_oracle&amp;quot;]==3)&lt;br&gt;{&lt;br&gt;$error=&amp;quot;插入没成功&amp;quot;;&lt;br&gt;}&lt;br&gt;echo &amp;quot;&amp;quot;.$row[&amp;quot;data_id&amp;quot;].&amp;quot;&lt;/font&gt;&lt;a href="http://blog.csdn.net/sanshi0815/archive/2005/05/31/pic_list.php?data_id=&amp;quot;.$row[&amp;quot;data_id&amp;quot;].&amp;quot;"&gt;&lt;u&gt;&lt;font color="#0000ff" size=3&gt;&amp;quot;.$row&lt;br&gt;[&amp;quot;title&amp;quot;].&amp;quot;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size=3&gt;&amp;quot;.$error.&amp;quot;&amp;quot;;&lt;br&gt;}&lt;br&gt;mysql_free_result($result);&lt;br&gt;}&lt;br&gt;function get_page_sum($sql)&lt;br&gt;{&lt;br&gt;$row_num=mysql_num_rows(mysql_query($sql));&lt;br&gt;$page_sum=ceil($row_num/$this-&amp;gt;page_num);&lt;br&gt;$this-&amp;gt;page_sum=$page_sum;&lt;br&gt;}&lt;br&gt;function get_page_head($sql)&lt;br&gt;{&lt;br&gt;$row_num=mysql_num_rows(mysql_query($sql));&lt;br&gt;if($row_num==0)&lt;br&gt;{&lt;br&gt;$head=&amp;quot; &lt;/font&gt;
&lt;div align=center&gt;&lt;font size=3&gt;没有您要查找的记录&lt;/font&gt;&lt;/div&gt;&lt;font size=3&gt;&amp;quot;; echo &amp;quot; &lt;/font&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan=3&gt;&lt;font size=3&gt;$head&lt;/font&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;font size=3&gt;&amp;quot;;&lt;br&gt;exit();&lt;br&gt;}&lt;br&gt;$page_sum=ceil($row_num/$this-&amp;gt;page_num);&lt;br&gt;$head=&amp;quot; &lt;/font&gt;
&lt;div&gt;&lt;font size=3&gt;共有记录 $row_num 条 共 $page_sum 页&lt;/font&gt;&lt;/div&gt;&lt;font size=3&gt;&amp;quot;;&lt;br&gt;echo &amp;quot;&amp;quot;; $this-&amp;gt;page_sum=$page_sum;&lt;br&gt;}&lt;br&gt;function db_connect()&lt;br&gt;{&lt;br&gt;$server=$this-&amp;gt;host.&amp;quot;:&amp;quot;.$this-&amp;gt;port;&lt;br&gt;$con=mysql_connect($server,$this-&amp;gt;user,$this-&amp;gt;passwd);&lt;br&gt;if(!$con)&lt;br&gt;{&lt;br&gt;echo &amp;quot;database is connect error!&amp;quot;.mysql_error().&amp;quot;&lt;br&gt;&amp;quot;; exit();&lt;br&gt;}&lt;br&gt;$select=mysql_select_db($this-&amp;gt;dbname);&lt;br&gt;if(!$select)&lt;br&gt;{&lt;br&gt;echo &amp;quot;select is not database error!&amp;quot;.mysql_error().&amp;quot;&lt;br&gt;&amp;quot;; exit();&lt;br&gt;}&lt;br&gt;$this-&amp;gt;con=$con;&lt;br&gt;}&lt;br&gt;function db_query($sql)&lt;br&gt;{&lt;br&gt;if($sql==&amp;quot;&amp;quot;)&lt;br&gt;{&lt;br&gt;echo &amp;quot;query is not null&lt;br&gt;&amp;quot;;&lt;br&gt;exit();&lt;br&gt;}&lt;br&gt;$result=mysql_query($sql,$this-&amp;gt;con);&lt;br&gt;if(!$result)&lt;br&gt;{&lt;br&gt;echo &amp;quot;\$sql error&lt;br&gt;&amp;quot;;&lt;br&gt;echo &amp;quot;\$sql is $sql&lt;br&gt;&amp;quot;;&lt;br&gt;exit();&lt;br&gt;}&lt;br&gt;$this-&amp;gt;result=$result;&lt;br&gt;}&lt;br&gt;}&lt;br&gt;?&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-8913911617972053559&amp;page=RSS%3a+%5bPHP%5d+php%e4%b8%8emysql%e5%ae%8c%e6%88%90%e7%9a%84%e5%88%86%e9%a1%b5%e7%b1%bb&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=miaomin.spaces.live.com&amp;amp;GT1=miaomin"&gt;</description><comments>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!161.entry#comment</comments><guid isPermaLink="true">http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!161.entry</guid><pubDate>Wed, 07 Dec 2005 09:35:20 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://miaomin.spaces.live.com/blog/cns!844B6C9C838C59C9!161/comments/feed.rss</wfw:commentRss><wfw:comment>http://miaomin.spaces.live.com/Blog/cns!844B6C9C838C59C9!161.entry#comment</wfw:comment><dcterms:modified>2005-12-07T09:35:20Z</dcterms:modified></item></channel></rss>