博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx 中缓存静态文件秘籍
阅读量:6376 次
发布时间:2019-06-23

本文共 1813 字,大约阅读时间需要 6 分钟。

这篇教程说明你应该怎样配置 nginx、设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片、 CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件。这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件)。
1、准备事项

我想你需要一个正常工作的 nginx 软件,可以查看另一篇的帖子:。

2 配置 nginx

可以参考 expires 指令手册来设置 HTTP 头部过期时间,这个标记可以放在 "http {}"、"server {}"、"location {}" 等语句块或者 "location {}" 语句块中的条件语句中。一般会在 "location" 语句块中用 "expires" 指令控制你的静态文件,就像下面一样:

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {   expires 365d;}

在上面的例子中,所有后缀名是 .jpg、 .jpeg、 .png、 .gif、 .ico、 .css 和 .js 的文件会在浏览器访问该文件之后的 365 天后过期。因此你要确保 location {} 语句块仅仅包含能被浏览器缓存的静态文件。

然后重启 nginx 进程:

/etc/init.d/nginx reload
你可以在 "expires" 指令中使用以下的时间设置:
  • ●"off" 让 "Expires" 和 "Cache-Control" 头部不能被更改。
  • ●"epoch" 将"Expires" 头部设置成 1970 年 1 月 1 日 00:00:01。
  • ●"max" 设置 "Expires" 头部为 2037 年 12 月 31 日 23:59:59,设置" Cache-Control "的最大存活时间为 10 年
  • ●没有" @ "前缀的时间意味着这是一个与浏览器访问时间有关的过期时间。可以指定一个负值的时间,就会把" Cache-Control "头部设置成" no-cache"。例如:"expires 10d" 或者" expires 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 文件 并且你要修改它,你可以在修改的文件名字后面添加一个版本号。这样浏览器就要下载这个文件,如果你没有更改文件名,浏览器将从缓存里面加载(旧的)文件。

除了把基于浏览器访问时间设置" Expires" 头部(比如 "expires 10d")之外,也可以通过在时间前面的" modified "关键字,将 "Expires" 头部的基准设为文件修改的时间(请注意这仅仅对存储在硬盘的实际文件有效)。

expires modified 10d;
3 测试

要测试你的配置是否有效,可以用火狐浏览器的开发者工具中的网络分析功能,然后用火狐访问一个静态文件(比如一张图片)。在输出的头部信息里,应该能看到 Expires 头部和有 max-age 标记的 Cache-Control 头部(max-age 标记包含了一个以秒为单位的值,比如 31536000 就是指今后的一年)

4 链接

nginx 的 Http 头部模块(HttpHeadersModule):" http://wiki.nginx.org/HttpHeadersModule"

本文转自Linux就该这么学博客园博客,原文链接:http://www.cnblogs.com/linuxprobe/p/5858656.html,如需转载请自行联系原作者

你可能感兴趣的文章
第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析
查看>>
fastJson顺序遍历JSON字段
查看>>
ES6 + Angular 1.x
查看>>
XtraBackup不停机不锁表搭建MySQL主从同步实践
查看>>
Linux Dailly
查看>>
Docker学习之路(一)
查看>>
Java工程师知识图谱
查看>>
[Spring实战系列](2)Maven创建Spring-HelloWorld项目
查看>>
CentOS安装运行NodeJS框架Express
查看>>
白话版 动态规划法
查看>>
(十六) 整合spring cloud云架构 -使用spring cloud Bus刷新配置
查看>>
全面总结国内BATH等大厂开源的安卓有关的库(持续更新中...)
查看>>
NutUI 2.1.0 发布,移动端轻量级 Vue 组件库
查看>>
缓存系列文章--热点key问题
查看>>
CSS动画小结
查看>>
初学乍练:一键部署redis集群
查看>>
从一个骗局谈生活中的基础算法
查看>>
JdbcTemplate使用别名绑定变量
查看>>
详解Apache Kylin安装和踩坑
查看>>
MVC架构中,用户的请求简单梳理
查看>>