转载自:Nginx使用Expires增加浏览器缓存加速
Nginx可以更改HTTP头部,这个是Web服务器必须的,当然Nginx更可以支持在HTTP头部中添加Expires等相关信息,增强浏览器缓存,是网页加载速度增强。
能够使浏览器缓存的HTTP头部信息主要有以下三种:
1、last-modified实现浏览器缓存
last-modified是根据文件更新时间来确定是否再次发送加载。通过返回last-modified头部信息:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | GET/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js HTTP/1.1 Host:www.3mc2.com User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0 Accept:*/* Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding:gzip,deflate Referer:http://www.3mc2.com/category/architecture Cookie:wp-settings-1=hidetb%3D0%26libraryContent%3Dbrowse%26align%3Dcenter%26urlbutton%3Dnone%26editor%3Dtinymce%26wplink%3D0%26ed_size%3D508%26mfold%3Do;wp-settings-time-1=1389840828 Connection:keep-alive HTTP/1.1200OK Server:nginx Date:Thu,16Jan201415:47:24GMT Content-Type:application/x-javascript Last-Modified:Thu,16Jan201402:29:13GMT Transfer-Encoding:chunked Connection:keep-alive Content-Encoding:gzip |
再次请求则带有If-Modified-Since头部信息,并返回404:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | GET/wp-includes/js/jquery/jquery.js?ver=1.10.2HTTP/1.1 Host:www.3mc2.com User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0 Accept:*/* Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding:gzip,deflate Referer:http://www.3mc2.com/category/architecture/nginx Connection:keep-alive If-Modified-Since:Thu,16Jan201402:29:13GMT HTTP/1.1304Not Modified Server:nginx Date:Thu,16Jan201415:53:34GMT Last-Modified:Thu,16Jan201402:29:13GMT Connection:keep-alive |
我的测试环境为firefox,网址中带有”?ver=”参数的文件会再次发送请求(返回304),其他文件均未再次请求。
2、Etag确定浏览器缓存:
Etag的原理是将文件资源编号一个etag值,Response给访问者,访问者再次请求时,带着这个Etag值,与服务端所请求的文件的Etag对比,如果不同了就重新发送加载,如果相同,则返回304.
3、Expires浏览器缓存:
Expires是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。如果文件变动较频繁,不要使用Expires来缓存。
对于本博客来说,css样式和JS脚本基本已经定型,所以最适合的方法是Expires来缓存一些内容到访问者浏览器。通过配置Nginx配置文件实现相关功能:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 | server{ ..... root/www.3mc2.com; index index.html index.htm index.php; location~.*\.(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf){ expires15d; } location~.*\.(css|js){ expires12h; } ...... } |