当前位置: 首页 > 科技观察

如何在nginx中缓存静态文件

时间:2023-03-19 23:16:55 科技观察

本教程讲解了你应该如何配置nginx,设置HTTP头过期时间,以及在Cache-Control中使用max-age来标记静态文件(如图片,CSS和Javascript文件)设置一个时间,这样用户的浏览器就会缓存这些文件。这样可以节省带宽,并且在访问您的站点时会显示得更快(如果用户第二次访问您的站点,将使用浏览器缓存中的静态文件)。1.准备工作我认为您需要一个可用的nginx软件,如本教程所示:在Ubuntu16.04LTS上安装Nginx、PHP7和MySQL5.7(LEMP)。2配置nginx,可以参考expires说明手册设置HTTP头的过期时间。该标记可以放在http{}、server{}、location{}等语句块中,也可以放在location{}语句块中的条件语句中。通常,你会在location语句块中使用expires指令来控制你的静态文件,像这样:location~*\.(jpg|jpeg|png|gif|ico|css|js)${expires365d;}在上面example中,所有扩展名为.jpg、.jpeg、.png、.gif、.ico、.css和.js的文件将在浏览器访问该文件后365天过期。所以你要确保location{}块只包含可以被浏览器缓存的静态文件。然后重启nginx进程:/etc/init.d/nginxreload可以在expires指令中使用以下时间设置:off这样Expires和Cache-Control头就不能被改变。纪元将Expires标头设置为1970年1月1日00:00:01。max设置Expires头为2037年12月31日23:59:59,设置Cache-Control的最大生存时间为10年。没有@前缀的时间表示这是一个与浏览器访问时间相关的过期时间。可以指定负时间,这会将Cache-Control标头设置为无缓存。例如:过期10d或过期14w3d。带有@前缀的时间指定在一天中的某个时间过期,格式为Hh或Hh:Mm,H的范围是0到24,M的范围是0到59,例如:expires@15:34.可以使用以下时间单位:ms:毫秒s:秒m:分h:时d:日w:周M:月(30天)y:年(365天)例如:1h30m表示一小时三十分钟,1y6M表示一年零六个月。请注意,如果您使用的标头在很久以后就会过期,则在修改组件时,您将不得不更改组件的文件名。因此,为文件分配一个版本是个好主意。比如你有一个javascript.js文件,你修改了它,你可以在修改后的文件名后面加一个版本号。然后浏览器将下载该文件,如果您没有更改文件名,浏览器将从缓存中加载(旧)文件。除了根据浏览器访问时间(比如expires10d)来设置Expiresheader,还可以使用时间前面的modified关键字,将Expiresheader的base设置为文件修改时间(注意这个仅对存储在硬盘上的实际文件有效)。expiresmodified10d;3测试要测试你的配置是否有效,可以使用Firefox开发者工具中的网络分析功能,然后使用Firefox访问一个静态文件(比如图片)。在输出的头信息中,应该可以看到Expires头和Cache-Control头带有max-age标签(max-age标签包含一个以秒为单位的值,比如31536000表示下一个year)4linknginxHttpHeaderModule(HttpHeadersModule):http://wiki.nginx.org/HttpHeadersModule