Nginx缓存设置案例详解


Posted in Servers onSeptember 15, 2021

在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用add_header来设置:分别为Cache-Control和Pragma。

nginx:
location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;add_header Pragma no-cache;
}

对于站点中不经常修改的静态内容(如图片,JS,CSS),可以在服务器中设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。

以Nginx服务器为例:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#过期时间为30天,
#图片文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
location ~ .*\.(js|css)$ {
expires 10d;
}

背景】:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

相关资料

1、Cache-control策略

Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。

http协议头Cache-Control

值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age

各个消息中的指令含义如下:

  • Public指示响应可被任何缓存区缓存。
  • Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
  • no-cache指示请求或响应消息不能缓存
  • no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
  • max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
  • min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
  • max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Last-Modified/If-Modified-Since

  • Last-Modified/If-Modified-Since要配合Cache-Control使用。
  • Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
  • If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

其最终达到的就是等效于设置这三类html缓存技术:

<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/> 
<meta http-equiv="expires" content="0"/>

到此这篇关于Nginx缓存设置案例详解的文章就介绍到这了,更多相关Nginx缓存设置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx反向代理多个服务器的实现方法
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
Nginx防盗链与服务优化配置的全过程
Jan 18 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
nginx配置之并发频次限制
Apr 18 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
搭建Yolov5服务器
Apr 30 Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
学习nginx基础知识
Nginx location 和 proxy_pass路径配置问题小结
Sep 04 #Servers
Nginx使用Lua模块实现WAF的原理解析
Nginx部署vue项目和配置代理的问题解析
centos8安装nginx1.9.1的详细过程
Aug 02 #Servers
You might like
php Hex RGB颜色值互换的使用
2013/05/10 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php命令行写shell实例详解
2018/07/19 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
微信小程序python用户认证的实现
2019/07/29 Python
python修改字典键(key)的方法
2019/08/05 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
总裁岗位职责
2013/12/04 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
决心书标准格式
2014/03/11 职场文书
个人欠款担保书
2014/05/20 职场文书
学校团代会开幕词
2016/03/04 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers