首页 > 系统相关 >用nginx缓存静态文件

用nginx缓存静态文件

时间:2022-12-08 12:41:05浏览次数:65  
标签:文件 缓存 浏览器 静态 expires nginx 头部 Expires

 

 

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

1、准备事项

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

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 进程:

  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 就是指今后的一年)

4 链接

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


via: ​​https://www.howtoforge.com/tutorial/how-to-cache-static-files-on-nginx/​

 

 

作者:​​sunsky303



标签:文件,缓存,浏览器,静态,expires,nginx,头部,Expires
From: https://blog.51cto.com/u_15715098/5920898

相关文章

  • struts2中OGNL中访问静态方法
     在struts2中,有时需要使用ognl去访问静态方法,典型的例子是,在新闻发布系统中,如果标题大于某个字数,必须截断,于是可以这样做:首先写一个静态的方法,然后在页面中这样写: <s:prop......
  • 十五、NHibernate之二级缓存
    什么是NHibernate二级缓存​NHibernate二级缓存由ISessionFactory创建,可以被所有的ISession共享。在NHibernate中,当我们启用NHibernate二级缓存。使用ISession进行数据操作......
  • Nginx rewrite 详解
    Nginxrewrite详解本篇主要介绍nginx的rewrite重定向这个功能进行详解介绍,以及介绍它的使用场景1.rewrite基本介绍rewrite是实现URL重写的关键指令,根据reg......
  • Nginx加权轮询负载均衡
    Nginx官方支持的后端服务负载均衡策略有加权轮询和IP哈希,默认采用加权轮询策略。加权轮询流程图代码流程staticngx_http_upstream_rr_peer_t*ngx_http_upstream_ge......
  • 017.二级缓存(2)
    1.good.xml(flushCache="true"在sql执行完之后强制清空缓存)<!--flushCache="true"在sql执行完之后强制清空缓存--><selectid="selectGoodsMap"resultType="java......
  • 016.1MyBatis二级缓存(1)
    1.一级缓存和二级缓存  2.缓存的范围  3.二级缓存的运行规则  4.测试一级缓存/***测试一级缓存**@throwsException*/......
  • Debian11.5 最小化安装后更改主机名、安装桌面、设置默认语言、时区、静态IP、局域网D
    最小化安装,指的是采用debian-11.5.0-amd64-netinst.iso382.0MiB2022-09-1020:40这个只有382M的镜像,仅安装了ssh服务的状态,只占了900多M磁盘空间。如果使用Live......
  • 数据结构:静态查找表(顺序表)
    #include<stdio.h>#include<stdlib.h>#defineOVERFLOW-2#defineFALSE 0#defineTRUE1typedefintStatus;typedefintIndexO......
  • atguigu3 三级菜单/目录_分布式缓存/分布式锁(product/category)
    0.问题:使用分布式锁解决读模式缓存失效(缓存击穿)和写模式缓存一致性问题!!!公共代码:CategoryBrandRelationService.javapackagecom.atguigu.gulimall.product.service;import......
  • 显示本机IP并判断IP地址,批量创建用户,安装nginx服务并启动
    完成一个shell脚本,脚本的作用。1.运行脚本可以显示出本机的ip地址2.如果ip地址中有3这个数字,那么就打印出当前的系统时间3.如果ip地址中不含3这个数字,就批量建立用户mag......