如何在 nginx 中缓存静态文件

幸运
185
文章
0
评论
三月 16, 202013:06:36 评论 175

这篇实例教程表明你应当如何配备 Nginx、设定 HTTP 头顶部到期時间,用 Cache-Control 中的 max-age 标识为静态数据文档(例如照片、 cssjavascript 文档)设定一个时间,这样用户的浏览器就会缓存这些文件。这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件)。

如何在 nginx 中缓存静态文件

1、准备事项

我想你需要一个正常工作的 Nginx 软件,就像这篇教程里展示的:在 Ubuntu 16.04 LTS 上安装 Nginx,php 7 和 Mysql 5.7 (LEMP)。

2 配置 nginx

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

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

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

然后重启 nginx 进程:

  1. /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 头部的基准设为文件修改的时间(请注意这仅仅对存储在硬盘的实际文件有效)。

  1. expires modified 10d;

3 测试

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

如何在 nginx 中缓存静态文件

4 链接

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

本文来源于:如何在 nginx 中缓存静态文件-幸运草博客
特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。

  • 本站QQ群
  • weinxin
  • 捐赠本站
  • weinxin
Nginx手把手安装 Nginx

Nginx手把手安装

Netcraft 发布了2018年1月 Web 服务器调查报告,排名前三的依然是 Microsoft、Apache 和 nginx 。 Nginx为什么值得学习呢?可以看这篇文章 → Nginx的优点...
nginx实例 - 如何防止大图片占满带宽? Nginx

nginx实例 – 如何防止大图片占满带宽?

场景 前几天网站出现了访问缓慢的情况,查看系统资源状况后,发现出网带宽一直是占满的状态 查看服务器日志,发现了很多10M左右的超大图片的请求,这些图片占满了带宽,严重影响了其他的访问请求 正常情况下是...
Nginx网站服务 Nginx

Nginx网站服务

1、Nginx:(优点) (1)高性能、轻量级web服务软件 (2)稳定性高 (3)系统资源消耗低 (4)对http并发连接的处理能力强 2、apache和nginx的区别: Apache:是多进程w...
nginx配置二级域名 Nginx

nginx配置二级域名

主机域名配置那些事 server_name 匹配顺序 nginx中的server_name是用于指定基于名称的虚拟主机,匹配顺序是在配置文件中检索,从上到下,一匹配到符合的则终止,所以配置得按照精准在...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: