[转]Nginx 静态资源缓存设置

摘要:
http协议头缓存控制:值可以是public、private、no Cache、no store、no transform、must revalidate、proxy revalidate和max age。每条消息中指令的含义如下:Public表示响应可以缓存在任何缓存中。Private表示共享缓存无法处理单个用户的全部或部分响应消息。无缓存表示请求或响应消息无法缓存任何存储,以防止重要信息被无意中发布。Max stane表示客户端可以接收超过超时时间的响应消息。If Modified Since:当资源过期时,会发现该资源具有Last Modified语句,然后会再次向web服务器请求该语句,并带有标题If Modified Since,指示请求时间。

本文转自:https://www.w3cschool.cn/nginxsysc/nginxsysc-cache.html

在开发调试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 静态资源缓存设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7 ping 未知的名称或服务 DNS 配置问题Android应用自动更新功能的代码实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

记Git保存本地密码与删除本地缓存

参考: https://www.jianshu.com/p/77b0340a02f3 https://blog.csdn.net/yunlong782/article/details/50887833?locationNum=7&fps=1 保存密码 git有三种策略查找用户名密码:去缓存中找,去磁盘中找,去钥匙串中找。 ~/User/用户...

第一步(搭建阿里云主机服务器): 如何在远程Linux服务器上搭建Nginx

首先得申明一下使用的工具有: 1. putty https://pan.baidu.com/s/1i4Ix8Hn 2. fileZilla https://pan.baidu.com/s/1nvJR8al 如果是抢购阿里云免费的就按照下面执行下去就行了,如果花钱买的主机,会顺手送你一个Apache服务器,你的手动卸载Apache,卸载的步骤 rpm -q...

页面嵌套 Iframe 产生缓存导致页面数据不刷新问题

  最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息。   初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳。这样能确保每次在加载页面时,让浏览器知道它是最新的页面。说白了就是欺骗下浏览器,躲过缓存的灾难。(这是从 Stack Overflow 和 CSDN 上找到...

java 实现redis缓存

由于项目加载时请求数据量过大,造成页面加载很慢。采用redis作缓存,使二次访问时页面,直接取redis缓存。 1.redis连接参数 2.连接redis,设置库 3.配置文件开启缓存 4.mapper文件配置 上图即为配置连接redis的类,添加在每个需要做缓存的mapper.xml文件中即可。redis缓存效果: 存储在redis中,若执行修改...

十三、nginx 强制下载txt等文件

当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件。 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/file/ { if ($request_filename ~* ^.*?.(txt|pdf|doc|xls)$){...

Nginx核心知识100讲学习笔记(陶辉)详解HTTP模块(详解11阶段)

一、server_name指令 1、指令后可跟多个域名。第一个是主域名 Syntax server_name_in_redirect on | off; Default server_name_in_redirect off; Context http, server, location server_name_in_redirect on server...