刚刚发了一篇关于Etag的主题,发现还蛮多人讨论的...再说一个....
模块作者演示的.是直接在/根目录使用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
Sponsored Links
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,要使用,请在动态脚本里面添加.
第三方模块Etags介绍:http://www.xmlchina.org/nginx-configuration-support-etags-module/