apache cache expire
来源:百度文库 编辑:神马文学网 时间:2024/04/28 11:17:22
服务器网页缓存的深入分析
John收藏于 2008年5月28日 18:09 |永久连接 |评论(0) |引用通告(0)
(转载自http://www.yuanma.org/data/2007/0909/article_2851.htm)
Expires、Cache-Control、Last-Modified、ETag是RFC 2616(HTTP/1.1)协议中和网页缓存相关的几个字段。前两个用来控制缓存的失效日期,后两个用来验证网页的有效性。要注意的是, HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,使用HTTP/1.0的缓存将忽略Expires和Cache-Control头。我们这里以Apache2.0服务器为例,只讨论HTTP/1.1协议。
Expires
Expires字段声明了一个网页或URL地址不再被浏览器缓存的时间,一旦超过了这个时间,浏览器都应该联系原始服务器。RFC告诉我们:"由于推断的失效时间也许会降低语义透明度,应该被谨慎使用,同时我们鼓励原始服务器尽可能提供确切的失效时间。"
对于一般的纯静态页面,如html、gif、jpg、css、js,默认安装的Apache服务器,不会在响应头添加这个字段。Firefox浏览器接受到相应后,如果发现没有Expires字段,浏览器根据文件的类型和"Last-Modified"字段来推断出一个合适的失效时间,并存储在客户端。推测出的时间一般是接受到响应时间后的三天左右。
Apache的expires_module模块可以在Http响应头部自动加上Expires字段。在Apache的httpd.conf文件中进行如下配置:
#启用expires_module模块
LoadModule expires_module modules/mod_expires.so
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType image/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
#以下的含义类似
ExpiresByType text/css "now plus 2 month"
ExpiresByType text/js "now plus 2 day"
ExpiresByType image/jpeg "access plus 2 month"
ExpiresByType image/bmp "access plus 2 month"
ExpiresByType image/x-icon "access plus 2 month"
ExpiresByType image/png "access plus 2 month"
对于动态页面,如果在页面内部没有通过函数强制加上Expires,例如header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT"),Apache服务器会把Wed, 11 Jan 1984 05:00:00 GMT作为Expires字段内容,返回给浏览器。即认为动态页面总是失效的。而浏览器仍然会保存已经失效的动态页面。
可以发现Firefox浏览器总是缓存所有页面,不管失效、不失效还是没有声明失效时间。即使缓存中声明了一个网页的实效日期是1970-01- 01 08:00:00,浏览器仍然会发送该文件在缓存中的Last-Modified和ETag字段。如果在服务器端验证通过,返回304状态,浏览器就还会使用此缓存。
Cache-Control
Cache-Control字段中可以声明多些元素,例如no-cache, must-revalidate, max-age=0等。这些元素用来指明页面被缓存最大时限,如何被缓存的,如何被转换到另一个不同的媒介,以及如何被存放在持久媒介中的。但是任何一个 Cache-Control指令都不能保证隐私性或者数据的安全性。"private"和"no-store"指令可以为隐私性和安全性方面提供一些帮助,但是他们并不能用于替代身
份验证和加密。
Apache的mod_cern_meta模块允许文件级Http响应头部的控制,同时它也可以配置Cache-Control头(或任何其他头)。响应头文件是放在原始目录的子目录中,根据原始文件名所命名的一个文件。具体用法请参阅Apache的官方网站。其中Cache-Control : max-age表示失效日期。如果没有启动mod_cern_meta模块,Apache服务器会把Expires字段中的日期换算成以秒为单位的一个 delta值,赋值给max-age。如果启动mod_cern_meta模块,并且配置了max-age值,Apache会将这个覆盖Expires字段。同时,max-age隐含了Canche-Control: public。这样浏览器接受到的Cache-Control : max-age和Expires值就是一致的。
如果失效日期Cache-Control : max-ag=0或者是负值,浏览器会在对应的缓存中把Expires设置为1970-01-01 08:00:00。
Last-Modified
Last-Modified和ETag是条件请求(Conditional Request)相关的两个字段。如果一个缓存收到了针对一个页面的请求,它发送一个验证请求询问服务器页面是否已经更改,在HTTP头里面带上" ETag"和"If Modify Since"头。服务器根据这些信息判断是否有更新信息,如果没有,就返回HTTP 304(NotModify);如果有更新,返回HTTP 200和更新的页面内容,并且携带新的"ETag"和"LastModified"。
使用这个机制,能够避免重复发送文件给浏览器,不过仍然会产生一个HTTP请求。
一般纯静态页面本身都会有Last-Modified信息,Apache服务器会读取页面文件中的Last-Modified信息,并添加到http响应头部。
对于动态页面,如果在页面内部没有通过函数强制加上Last-Modified,例如header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"),Apache服务器会把当前时间作为Last-Modified,返回给浏览器。
无论是纯静态页面还是动态页面,Firefox浏览器巧妙地按照接受到服务器响应的时间设置缓存页面的Last-Modified,而不是按照http响应头部中的Last-Modified字段。
ETag
既然有了Last-Modified,为什么还要用ETag字段呢?因为如果在一秒钟之内对一个文件进行两次更改,Last-Modified就会不正确。因此,HTTP/1.1利用Entity Tag头提供了更加严格的验证。
Apache服务器默认情况下,会对所有的静态、动态文件的响应头添加ETag字段。在Apache的httpd.conf文件中可以通过FileETag指令配置该选项。
FileETag指令配置了当文档是基于一个文件时用以创建 Etag(entity tag)响应头的文件的属性。在Apache 1.3.22及以前,ETag的值是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。如果一个目录的配置包含了'FileETag INode MTime Size'而其一个子目录包含了'FileETag -INode'那么这个子目录的设置(并会被其下任何没有进行覆盖的子目录继承)将等价于'FileETag MTime Size'。
在多台负载平衡的服务器环境下,同一个文件会有不同的etag或者文件修改日期,浏览器每次都会重新下载。设置'FileETag None'可以使响应头不再包含ETag字段。
三种典型web服务器Header设置内容过期方法
一、Internet 信息服务 (IIS)的内容过期设置
如果IIS 网站中有时间敏感信息,可以配置设置来保证过期信息不被代理服务器或 Web 浏览器缓存。可以配置网站内容,使之在任何的时间自动过期。当启用内容过期时,Web 浏览器将比较当前日期和截止日期,以便决定是显示缓存页还是从服务器请求更新的页。Microsoft ASP.NET 这样的服务器端技术可用于动态更改提供的内容。通常,时间敏感信息只限于单个文件、目录或网站;不过,您也可以为某台计算机上的所有网站设置内容过期。
必须是本地计算机上 Administrators 组的成员或者必须被委派了相应的权限,才能执行下列步骤。作为安全性的最佳操作,请使用不属于 Administrators 组的帐户登录计算机,然后使用运行方式命令以管理员身份运行 IIS管理器在命令提示符下,键入 runas /user:administrative_accountname "mmc %systemroot%\system32\inetsrv\iis.msc"。
设置网站内容的过期时间
1. 在 IIS 管理器中,展开本地计算机;右键单击要设置内容过期的网站、虚拟目录或文件,然后单击"属性"。
2. 单击"HTTP 头"选项卡。
3. 选中"启用内容过期"复选框。
4. 单击"立即过期"、"此时间段后过期"或"过期时间",然后在对应的框中输入所需的过期信息。
5. 单击"确定"。
二、APACHE服务的内容过期设置
Apache配置摘录及解释
i. 过期相关设置
LoadModule headers_module modules/mod_headers.so
#Load 修改header的模块。
LoadModule expires_module modules/mod_expires.so
#Load 设定过期header的模块。
Header append Via: CCN-BJ-4-502
#增加一个Via header,值配置成设备的hostname。
KeepAliveTimeout 60
#设置连接的保持时间为60秒。
ExpiresActive On
#启用过期header功能。
ExpiresDefault A604800
#缺省过期时间为"访问后的604800秒"
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ExpiresByType text/html A300
#text/html类型文件的过期设置为"访问后的300秒"
ExpiresByType text/css A259200
#text/css类型文件的过期设置为"访问后的259200秒"
ExpiresByType application/x-javascript A300
# application/x-javascript类型文件的过期设置为"访问后的300秒"
ExpiresByType image/gif A2592000
#image/gif类型文件的过期设置为"访问后的2592000秒"
ExpiresByType application/x-shockwave-flash A2592000
# application/x-shockwave-flash类型文件的过期设置为"访问后的2592000秒"
上述配置文件中load的两个模块:mod_headers.so 和mod_expires.so 可以让Apache具有对header的一些定制功能。
ExpiresByType: 表示按照文件类型-MIME-TYPE设定过期策略;
A300: 表示在Access后300秒后过期;
ExpiresByType text/css A2592000: 表示Mime type是text/css的文件,在Access后2592000秒过期。
ExpiresDefault A604800: 表示除了单独制定的文件类型等过期策略外的其他内容,按照这个缺省的策略设定:访问后604800秒过期。
上面的方法可以实现根据web发布的不同文件类型,针对不同的发布目录进行过期策略设置。在按照如上方法设置后,Apache会自动的产生两个相关的http header,举例如下:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2007 17:44:21 GMT
Server: Apache/2.0.54 (Unix)
Last-Modified: Thu, 25 Jan 2007 07:45:45 GMT
ETag: "72df3a-93-99499c40"
Accept-Ranges: bytes
Content-Length: 147
Cache-Control: max-age=2592000
Expires: Thu, 26 Apr 2007 17:44:21 GMT
Via: CCN-BJ-4-575
Keep-Alive: timeout=60, max=100
Connection: Keep-Alive
Content-Type: image/gif
Length: 147 [image/gif]
其中:Date + Max-age = Expires. Max-age是个时间长度,对应web server上面设置的过期时间;Expires是根据max-age算出来的过期时间点,两者是一致的,不同cache在判断内容是否过期时会严格比较系统时间和上述过期时间,或者比较age(在cache中存住的时间长度)和max-age的值。
三、lighttpd
lighttpd默认是没有开启expire模块的,需要我们在使用是手工开启这个模块支持。把mod_expire前面的"#"号去掉。
# vi /usr/local/lighttpd/etc/lighttpd.conf
"mod_expire",
设定过期时间
* 设定指定url的过期时间:
expire.url = (
"/images/" => "access 3 hours",
"/admin/" => "access 3 hours",
"/area/" => "access 3 hours",
"/calendar/" => "access 3 hours",
"/common/" => "access 3 hours",
"/front/" => "access 3 hours",
"/inc/" => "access 3 hours",
"/jeditor/" => "access 3 hours",
"/js/" => "access 3 hours",
"/script/" => "access 3 hours",
"/theme/" => "access 3 hours",
"/upload/" => "access 3 hours",
"/view/" => "access 3 hours",
"/help/" => "access 3 hours",
"/htm/" => "access 5 minutes"
)
设置Etag
在配置文件中增加,etag.use-inode="disable"(i节点不参与etag的运算),保证多台服务器生成的Etag值一致。
国内网站 WebServer 和所用 Cache 类型统计
John收藏于 2008年5月27日 18:42 |永久连接 |评论(0) |引用通告(0)
(转载自http://www.cnbeta.com/articles/56551.htm)
抽时间统计了一下几个网站的前端 WebServer 类型和所用的 Cache 类型,结果如下:
综合类,从结果上来看 Apache 还是主流:
Site WebServer Cache
www.baidu.com BWS/1.0 N/A
www.qq.com Apache squid/2.6.STABLE5
www.sina.com.cn Apache/2.0.54 (Unix) N/A
www.sohu.com Apache/1.3.37 (Unix) mod_gzip/1.3.26.1a squid
www.163.com Apache/2.2.6 (Unix) N/A
www.taobao.com Apache N/A
www.google.cn gws N/A
www.tom.com Apache NetCache NetApp/6.1.1D4
www.soso.com Apache N/A
www.youku.com Apache N/A
www.xunlei.com Apache/2.2.8 (Unix) N/A
www.eastmoney.com Microsoft-IIS/6.0 N/A
www.56.com nginx/0.5.33 squid/2.6.STABLE12-20070426
www.6.cn nginx/0.6.14 squid/3.0.STABLE1.dev
www.51.com Apache N/A
www.yahoo.cn 4EWS N/A
www.poco.cn Apache N/A
www.sogou.com Apache/2.0.61 (Unix) Resin/3.0.24
博客类:
Site WebServer Cache
blog.sina.com.cn nginx/0.5.35 N/A
hi.baidu.com apache 1.1.23.2 N/A
qzone.qq.com Apache N/A
blog.sohu.com Apache squid
www.bokee.com Apache/1.3.31 (Unix) mod_gzip/1.3.26.1a N/A
www.blogcn.com Microsoft-IIS/6.0 Cdn Cache Server V2.0
社区类,这里面相当大的比例用了 M$ IIS,奇怪:
Site WebServer Cache
www.mop.com lighttpd N/A
www.cyworld.com.cn Apache N/A
bbs.qq.com Apache N/A
www.tianyaclub.com Microsoft-IIS/5.0 N/A
bbs.csdn.net Microsoft-IIS/6.0 Longrujun?
club.xilu.com Apache/2.2.0 (Unix) PHP/5.2.1 N/A
www.tiexue.net Microsoft-IIS/6.0 N/A
www.xici.net Microsoft-IIS/6.0 N/A
bbs.sina.com.cn Apache/2.0.54 (Unix) N/A
www.newsmth.net nginx/0.5.35 squid/3.0.STABLE1
视频类,之所以选择这个类别,是因为视频类对前端要求数据量和流量特别大,连接数特别多,这些特征也能反映出一些问题。从结果看也普遍采用了比较轻快的 lighttpd 或 nginx,另外用 squid 或 cdn 之类做 cache:
Site WebServer Cache
www.6.cn nginx/0.6.14(网页)
nginx/0.6.14(视频) squid/3.0.STABLE1.dev(网页)
www.youku.com Apache(网页)
lighttpd(视频) N/A
www.56.com nginx/0.5.33(网页)
56.com flv server(视频) squid/2.6.STABLE12-20070426(网页)
www.ku6.com Apache(网页)
nginx/0.5.35(视频) CDN(视频)
www.tudou.com Apache(网页)
Cdn Cache Server V2.0(视频) chinanetcenter.com(视频)
www.pomoho.com Microsoft-IIS/5.0 N/A
John收藏于 2008年5月28日 18:09 |永久连接 |评论(0) |引用通告(0)
(转载自http://www.yuanma.org/data/2007/0909/article_2851.htm)
Expires、Cache-Control、Last-Modified、ETag是RFC 2616(HTTP/1.1)协议中和网页缓存相关的几个字段。前两个用来控制缓存的失效日期,后两个用来验证网页的有效性。要注意的是, HTTP/1.0有一个功能比较弱的缓存控制机制:Pragma,使用HTTP/1.0的缓存将忽略Expires和Cache-Control头。我们这里以Apache2.0服务器为例,只讨论HTTP/1.1协议。
Expires
Expires字段声明了一个网页或URL地址不再被浏览器缓存的时间,一旦超过了这个时间,浏览器都应该联系原始服务器。RFC告诉我们:"由于推断的失效时间也许会降低语义透明度,应该被谨慎使用,同时我们鼓励原始服务器尽可能提供确切的失效时间。"
对于一般的纯静态页面,如html、gif、jpg、css、js,默认安装的Apache服务器,不会在响应头添加这个字段。Firefox浏览器接受到相应后,如果发现没有Expires字段,浏览器根据文件的类型和"Last-Modified"字段来推断出一个合适的失效时间,并存储在客户端。推测出的时间一般是接受到响应时间后的三天左右。
Apache的expires_module模块可以在Http响应头部自动加上Expires字段。在Apache的httpd.conf文件中进行如下配置:
#启用expires_module模块
LoadModule expires_module modules/mod_expires.so
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType image/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
#以下的含义类似
ExpiresByType text/css "now plus 2 month"
ExpiresByType text/js "now plus 2 day"
ExpiresByType image/jpeg "access plus 2 month"
ExpiresByType image/bmp "access plus 2 month"
ExpiresByType image/x-icon "access plus 2 month"
ExpiresByType image/png "access plus 2 month"
对于动态页面,如果在页面内部没有通过函数强制加上Expires,例如header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT"),Apache服务器会把Wed, 11 Jan 1984 05:00:00 GMT作为Expires字段内容,返回给浏览器。即认为动态页面总是失效的。而浏览器仍然会保存已经失效的动态页面。
可以发现Firefox浏览器总是缓存所有页面,不管失效、不失效还是没有声明失效时间。即使缓存中声明了一个网页的实效日期是1970-01- 01 08:00:00,浏览器仍然会发送该文件在缓存中的Last-Modified和ETag字段。如果在服务器端验证通过,返回304状态,浏览器就还会使用此缓存。
Cache-Control
Cache-Control字段中可以声明多些元素,例如no-cache, must-revalidate, max-age=0等。这些元素用来指明页面被缓存最大时限,如何被缓存的,如何被转换到另一个不同的媒介,以及如何被存放在持久媒介中的。但是任何一个 Cache-Control指令都不能保证隐私性或者数据的安全性。"private"和"no-store"指令可以为隐私性和安全性方面提供一些帮助,但是他们并不能用于替代身
份验证和加密。
Apache的mod_cern_meta模块允许文件级Http响应头部的控制,同时它也可以配置Cache-Control头(或任何其他头)。响应头文件是放在原始目录的子目录中,根据原始文件名所命名的一个文件。具体用法请参阅Apache的官方网站。其中Cache-Control : max-age表示失效日期。如果没有启动mod_cern_meta模块,Apache服务器会把Expires字段中的日期换算成以秒为单位的一个 delta值,赋值给max-age。如果启动mod_cern_meta模块,并且配置了max-age值,Apache会将这个覆盖Expires字段。同时,max-age隐含了Canche-Control: public。这样浏览器接受到的Cache-Control : max-age和Expires值就是一致的。
如果失效日期Cache-Control : max-ag=0或者是负值,浏览器会在对应的缓存中把Expires设置为1970-01-01 08:00:00。
Last-Modified
Last-Modified和ETag是条件请求(Conditional Request)相关的两个字段。如果一个缓存收到了针对一个页面的请求,它发送一个验证请求询问服务器页面是否已经更改,在HTTP头里面带上" ETag"和"If Modify Since"头。服务器根据这些信息判断是否有更新信息,如果没有,就返回HTTP 304(NotModify);如果有更新,返回HTTP 200和更新的页面内容,并且携带新的"ETag"和"LastModified"。
使用这个机制,能够避免重复发送文件给浏览器,不过仍然会产生一个HTTP请求。
一般纯静态页面本身都会有Last-Modified信息,Apache服务器会读取页面文件中的Last-Modified信息,并添加到http响应头部。
对于动态页面,如果在页面内部没有通过函数强制加上Last-Modified,例如header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"),Apache服务器会把当前时间作为Last-Modified,返回给浏览器。
无论是纯静态页面还是动态页面,Firefox浏览器巧妙地按照接受到服务器响应的时间设置缓存页面的Last-Modified,而不是按照http响应头部中的Last-Modified字段。
ETag
既然有了Last-Modified,为什么还要用ETag字段呢?因为如果在一秒钟之内对一个文件进行两次更改,Last-Modified就会不正确。因此,HTTP/1.1利用Entity Tag头提供了更加严格的验证。
Apache服务器默认情况下,会对所有的静态、动态文件的响应头添加ETag字段。在Apache的httpd.conf文件中可以通过FileETag指令配置该选项。
FileETag指令配置了当文档是基于一个文件时用以创建 Etag(entity tag)响应头的文件的属性。在Apache 1.3.22及以前,ETag的值是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。如果一个目录的配置包含了'FileETag INode MTime Size'而其一个子目录包含了'FileETag -INode'那么这个子目录的设置(并会被其下任何没有进行覆盖的子目录继承)将等价于'FileETag MTime Size'。
在多台负载平衡的服务器环境下,同一个文件会有不同的etag或者文件修改日期,浏览器每次都会重新下载。设置'FileETag None'可以使响应头不再包含ETag字段。
三种典型web服务器Header设置内容过期方法
一、Internet 信息服务 (IIS)的内容过期设置
如果IIS 网站中有时间敏感信息,可以配置设置来保证过期信息不被代理服务器或 Web 浏览器缓存。可以配置网站内容,使之在任何的时间自动过期。当启用内容过期时,Web 浏览器将比较当前日期和截止日期,以便决定是显示缓存页还是从服务器请求更新的页。Microsoft ASP.NET 这样的服务器端技术可用于动态更改提供的内容。通常,时间敏感信息只限于单个文件、目录或网站;不过,您也可以为某台计算机上的所有网站设置内容过期。
必须是本地计算机上 Administrators 组的成员或者必须被委派了相应的权限,才能执行下列步骤。作为安全性的最佳操作,请使用不属于 Administrators 组的帐户登录计算机,然后使用运行方式命令以管理员身份运行 IIS管理器在命令提示符下,键入 runas /user:administrative_accountname "mmc %systemroot%\system32\inetsrv\iis.msc"。
设置网站内容的过期时间
1. 在 IIS 管理器中,展开本地计算机;右键单击要设置内容过期的网站、虚拟目录或文件,然后单击"属性"。
2. 单击"HTTP 头"选项卡。
3. 选中"启用内容过期"复选框。
4. 单击"立即过期"、"此时间段后过期"或"过期时间",然后在对应的框中输入所需的过期信息。
5. 单击"确定"。
二、APACHE服务的内容过期设置
Apache配置摘录及解释
i. 过期相关设置
LoadModule headers_module modules/mod_headers.so
#Load 修改header的模块。
LoadModule expires_module modules/mod_expires.so
#Load 设定过期header的模块。
Header append Via: CCN-BJ-4-502
#增加一个Via header,值配置成设备的hostname。
KeepAliveTimeout 60
#设置连接的保持时间为60秒。
ExpiresActive On
#启用过期header功能。
ExpiresDefault A604800
#缺省过期时间为"访问后的604800秒"
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ExpiresByType text/html A300
#text/html类型文件的过期设置为"访问后的300秒"
ExpiresByType text/css A259200
#text/css类型文件的过期设置为"访问后的259200秒"
ExpiresByType application/x-javascript A300
# application/x-javascript类型文件的过期设置为"访问后的300秒"
ExpiresByType image/gif A2592000
#image/gif类型文件的过期设置为"访问后的2592000秒"
ExpiresByType application/x-shockwave-flash A2592000
# application/x-shockwave-flash类型文件的过期设置为"访问后的2592000秒"
上述配置文件中load的两个模块:mod_headers.so 和mod_expires.so 可以让Apache具有对header的一些定制功能。
ExpiresByType: 表示按照文件类型-MIME-TYPE设定过期策略;
A300: 表示在Access后300秒后过期;
ExpiresByType text/css A2592000: 表示Mime type是text/css的文件,在Access后2592000秒过期。
ExpiresDefault A604800: 表示除了单独制定的文件类型等过期策略外的其他内容,按照这个缺省的策略设定:访问后604800秒过期。
上面的方法可以实现根据web发布的不同文件类型,针对不同的发布目录进行过期策略设置。在按照如上方法设置后,Apache会自动的产生两个相关的http header,举例如下:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2007 17:44:21 GMT
Server: Apache/2.0.54 (Unix)
Last-Modified: Thu, 25 Jan 2007 07:45:45 GMT
ETag: "72df3a-93-99499c40"
Accept-Ranges: bytes
Content-Length: 147
Cache-Control: max-age=2592000
Expires: Thu, 26 Apr 2007 17:44:21 GMT
Via: CCN-BJ-4-575
Keep-Alive: timeout=60, max=100
Connection: Keep-Alive
Content-Type: image/gif
Length: 147 [image/gif]
其中:Date + Max-age = Expires. Max-age是个时间长度,对应web server上面设置的过期时间;Expires是根据max-age算出来的过期时间点,两者是一致的,不同cache在判断内容是否过期时会严格比较系统时间和上述过期时间,或者比较age(在cache中存住的时间长度)和max-age的值。
三、lighttpd
lighttpd默认是没有开启expire模块的,需要我们在使用是手工开启这个模块支持。把mod_expire前面的"#"号去掉。
# vi /usr/local/lighttpd/etc/lighttpd.conf
"mod_expire",
设定过期时间
* 设定指定url的过期时间:
expire.url = (
"/images/" => "access 3 hours",
"/admin/" => "access 3 hours",
"/area/" => "access 3 hours",
"/calendar/" => "access 3 hours",
"/common/" => "access 3 hours",
"/front/" => "access 3 hours",
"/inc/" => "access 3 hours",
"/jeditor/" => "access 3 hours",
"/js/" => "access 3 hours",
"/script/" => "access 3 hours",
"/theme/" => "access 3 hours",
"/upload/" => "access 3 hours",
"/view/" => "access 3 hours",
"/help/" => "access 3 hours",
"/htm/" => "access 5 minutes"
)
设置Etag
在配置文件中增加,etag.use-inode="disable"(i节点不参与etag的运算),保证多台服务器生成的Etag值一致。
国内网站 WebServer 和所用 Cache 类型统计
John收藏于 2008年5月27日 18:42 |永久连接 |评论(0) |引用通告(0)
(转载自http://www.cnbeta.com/articles/56551.htm)
抽时间统计了一下几个网站的前端 WebServer 类型和所用的 Cache 类型,结果如下:
综合类,从结果上来看 Apache 还是主流:
Site WebServer Cache
www.baidu.com BWS/1.0 N/A
www.qq.com Apache squid/2.6.STABLE5
www.sina.com.cn Apache/2.0.54 (Unix) N/A
www.sohu.com Apache/1.3.37 (Unix) mod_gzip/1.3.26.1a squid
www.163.com Apache/2.2.6 (Unix) N/A
www.taobao.com Apache N/A
www.google.cn gws N/A
www.tom.com Apache NetCache NetApp/6.1.1D4
www.soso.com Apache N/A
www.youku.com Apache N/A
www.xunlei.com Apache/2.2.8 (Unix) N/A
www.eastmoney.com Microsoft-IIS/6.0 N/A
www.56.com nginx/0.5.33 squid/2.6.STABLE12-20070426
www.6.cn nginx/0.6.14 squid/3.0.STABLE1.dev
www.51.com Apache N/A
www.yahoo.cn 4EWS N/A
www.poco.cn Apache N/A
www.sogou.com Apache/2.0.61 (Unix) Resin/3.0.24
博客类:
Site WebServer Cache
blog.sina.com.cn nginx/0.5.35 N/A
hi.baidu.com apache 1.1.23.2 N/A
qzone.qq.com Apache N/A
blog.sohu.com Apache squid
www.bokee.com Apache/1.3.31 (Unix) mod_gzip/1.3.26.1a N/A
www.blogcn.com Microsoft-IIS/6.0 Cdn Cache Server V2.0
社区类,这里面相当大的比例用了 M$ IIS,奇怪:
Site WebServer Cache
www.mop.com lighttpd N/A
www.cyworld.com.cn Apache N/A
bbs.qq.com Apache N/A
www.tianyaclub.com Microsoft-IIS/5.0 N/A
bbs.csdn.net Microsoft-IIS/6.0 Longrujun?
club.xilu.com Apache/2.2.0 (Unix) PHP/5.2.1 N/A
www.tiexue.net Microsoft-IIS/6.0 N/A
www.xici.net Microsoft-IIS/6.0 N/A
bbs.sina.com.cn Apache/2.0.54 (Unix) N/A
www.newsmth.net nginx/0.5.35 squid/3.0.STABLE1
视频类,之所以选择这个类别,是因为视频类对前端要求数据量和流量特别大,连接数特别多,这些特征也能反映出一些问题。从结果看也普遍采用了比较轻快的 lighttpd 或 nginx,另外用 squid 或 cdn 之类做 cache:
Site WebServer Cache
www.6.cn nginx/0.6.14(网页)
nginx/0.6.14(视频) squid/3.0.STABLE1.dev(网页)
www.youku.com Apache(网页)
lighttpd(视频) N/A
www.56.com nginx/0.5.33(网页)
56.com flv server(视频) squid/2.6.STABLE12-20070426(网页)
www.ku6.com Apache(网页)
nginx/0.5.35(视频) CDN(视频)
www.tudou.com Apache(网页)
Cdn Cache Server V2.0(视频) chinanetcenter.com(视频)
www.pomoho.com Microsoft-IIS/5.0 N/A
apache cache expire
apache
java cache
java cache
The buffer cache
使用SQL Cache Dependencies
TMS320C64x+ DSP-----Cache 优化
使用SQL Cache Dependencies
Web cache 说明
通过api访问ie cache
CodeProject: Memcached (Distributed Cache) AS...
Buffer和Cache的区别
How DNS cache poisoning works
通过api访问ie cache
apache亂碼問題?
apache 调优
Apache工程
apache缓存
Apache Error
apache配置
RubyonRails Page Cache 的扩展名问题
Cache Performance Comparison 缓存性能比较
使用 Internet 高速缓存协议 (Internet Cache Protocol, ...
Enterprise Library4.0 Cache Application Block...