nginx配置expires,nginx expires页面缓存时间设置

发布时间:2019-10-14编辑:脚本学堂
有关nginx expires在nginx缓存中的配置方法,合理配置expires可以减少很多服务器的请求,并介绍了nginx如何配置静态文件expires时间的方法等。

nginx expires页面缓存时间设置

一、配置expires
expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求
要配置expires,可以在http段中或者server段中或者location段中加入:
 

复制代码 代码示例:
location ~ .(gif|jpg|jpeg|png|bmp|ico)$ {
root /var/www/img/;
expires 30d;
}

控制图片等过期时间为30天,当然这个时间可以设置的更长。
例如:
 

复制代码 代码示例:
location ~ .(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {
root /var/www/upload/;
expires max;
}

expires 指令可以控制 http 应答中的“ expires ”和“ cache-control ”的头标(起到控制页面缓存的作用)
语法:expires [time|epoch|max|pff]

默认值:off
expires指令控制http应答中的“expires”和“cache-control”header头部信息,启动控制页面缓存的作用
time:可以使用正数或负数。“expires”头标的值将通过当前系统时间加上设定time值来设定。
time值还控制"cache-control"的值:
负数表示no-cache
正数或零表示max-age=time

epoch:指定“expires”的值为 1 january,1970,00:00:01 gmt
max:指定“expires”的值为31 december2037 23:59:59gmt,"cache-control"的值为10年。
-1:指定“expires”的值为当前服务器时间-1s,即永远过期。
off:不修改“expires”和"cache-control"的值

expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。

而cache-control是用max-age指令指定组件被缓存多久。
对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但http规范规定max-age指令将重写expires头。

二、nginx如何配置静态文件expires时间

对于站点中不经常修改的静态内容(如图片,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。

三、nginx expires浏览器本地缓存设置

expires
语法:expires [time|epoch|max|off]
默认值:expires off

使用字段:http, server, location
在应答头中是否开启对“expires”和“cache-control”的增加和修改操作。

可以指定一个正或负的时间值,expires头中的时间根据目前时间和指令中指定的时间的和来获得。
epoch表示自1970年一月一日00:00:01 gmt的绝对时间,max指定expires的值为2037年12月31日
23:59:59,cache-control的值为10 years。

cache-control头的内容随预设的时间标识指定:
·设置为负数的时间值:cache-control: no-cache。
·设置为正数或0的时间值:cache-control: max-age = #,这里#的单位为秒,在指令中指定。
参数off禁止修改应答头中的"expires"和"cache-control"。

注意:expires仅仅适用于200, 204, 301, 302,和304应答

例如:
 

//对图片,flash文件在浏览器本地缓存30天
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
//对js,css文件在浏览器本地缓存1小时
location ~ .*.(js|css)$
{
expires 1h;
}