前言:
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;}
以上内容pdf版本下载: Nginx配置启用ETag提高访问速度.pdf