刚刚发了一篇关于Etag的主题,发现还蛮多人讨论的...再说一个....安装教程在这里:第三方模块Etags介绍与安装
模块作者演示的.是直接在/根目录使用Etag,而我们要为一些静态元素添加Etag,所以我们要将这些文件后缀添加进来.用:
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|xml|txt|flv|swf|mid|doc|cur|xls|pdf|txt|mp3|wma)$ {
expires 7d;
FileETag on;
etag_format "%X%X";
}
这里大家发现多了一个参数.etag_format,这个其实在模块的c文件中可以找到.
/*
* Two configuration elements: `enable_etags` and `etag_format`, specified in
* the `Location` block.
*/
typedef struct {
ngx_uint_t FileETag;
ngx_str_t etag_format;
} ngx_http_static_etags_loc_conf_t;
默认的参数设置是:%s_%X_%X,表现出来的就是文件名和http协议版本,如:
HTTP/1.1 200 OK
Server: XCWS/1.0
Date: Fri, 13 Nov 2009 07:50:20 GMT
Content-Type: text/html
Content-Length: 7642
Last-Modified: Fri, 13 Nov 2009 02:41:02 GMT
Connection: keep-alive
Vary: Accept-Encoding
Etag: /readme.html HTTP/1.1
User-Agent_1DDA_4AFCC73E
Expires: Fri, 20 Nov 2009 07:50:20 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes
但是这个并没有作用,浏览器还是每次都要去服务器找这个文件并下载.所以我们要改这个参数设置.
我们之间在FileETag on;后面直接再加一个etag_format "%X%X"; (Etag是基于标准16进制apache文件修改时间的)
之后我们再执行curl命令.OK.成功了.
$curl --head http://www.xmlchina.org/readme.html
HTTP/1.1 200 OK
Server: XCWS/1.0
Date: Fri, 13 Nov 2009 07:59:00 GMT
Content-Type: text/html
Content-Length: 7642
Last-Modified: Fri, 13 Nov 2009 02:41:02 GMT
Connection: keep-alive
Vary: Accept-Encoding
Etag: B638900D1DDA
Expires: Fri, 20 Nov 2009 07:59:00 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes
不建议将动态内容也使用Etag,要使用,请在动态脚本里面添加.
[ 本帖最后由 诡谲 于 2009-11-13 16:53 编辑 ] |