前言:

Etag全称EntityTags,http协议规格说明中定义“etag”为被请求的实体值,也可以把它理解为etag理解为是一个客户端与服务器关联的记号,这个记号告诉客户端,当前网页在上次请求之后是否有变化,当发生变化时候,etag的值重新计算,并返回200状态码,如果没有变化,返回304状态码,而不会重新加载整个页面信息。

1,确认nginx版本

# /usr/local/nginx/sbin/nginx  -v

nginx version: nginx/1.8.1

2,下载配置

#git clone https://github.com/mikewest/nginx-static-etags

重新编辑nginx把etag模版加进去,可以先尝试直接在http中添加,要报错或者没有etag再编译。

-V/usr/local/nginx/sbin/nginx  -v

–add-module=/usr/local/nginx/conf/nginx-static-etags & make

版本为1.7.3及以上,按以下步骤1,版本为1.7.3及一下,按步骤2操作,版本1.3.3以下不支持etag,升级后再使用。

1,在http段加入etag on;即为启用etag。

http {

etag  on;

# /usr/local/nginx/sbin/nginx  -s reload  即可生效。

开启gzip时,可能与etag出现冲突,用浏览器多次请求此网站的静态元素,如果只返回200,不返回304,证明存在冲突。

2,关闭gzip即将上一部中的gzip on 改为gzip off。再添加etag on;。

若不想关闭gzip,且要开启etag,同时仍要坚持使用当前版本,需要修改nginx源码并重新编译。编辑ngx_http_gzip_filter_module.c 文件的309行代码,如果找到ngx_http_clear_etag(r);删掉或者 ,如果没有找到而是ngx_http_weak_etag(r);表示gzip和etag没有冲突,不用修改。

# vim  src/http/modules/ngx_http_gzip_filter_module.c

ngx_http_clear_content_length(r);

ngx_http_clear_accept_ranges(r);

ngx_http_weak_etag(r);

return ngx_http_next_header_filter(r);
3,使用验证

在http段添加之后,可以使用location进行所有的静态资源内容配置etag。

#expire缓存功能#

location  ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

etag on;

access_log  off; #不记录不需要的访问日志

expires    3d;}

location  ~ .*\.(js|css)?${

etag on;

expires 30d;}

2016051802

以上内容pdf版本下载: Nginx配置启用ETag提高访问速度.pdf

发表评论

后才能评论