nginx中expires控制页面缓存详解

发布时间:2020-03-03编辑:脚本学堂
本文介绍了nginx服务器中expires控制页面缓存的方法,expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用),有需要的朋友参考下。

使用nginx expires控制页面缓存的方法。

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头。

如果不想让代理或浏览器缓存,加no-cache参数或private参数:
# expires 1d;
add_header Cache-Control no-cache;
add_header Cache-Control private;
这样浏览器F5刷新时,返回的依然是200,而不是304.

记录一个nginx控制缓存的例子:
 

复制代码 代码示例:
expires 1d;
 add_header Cache-Control no-cache;
 add_header Cache-Control private;
 if ( !-e $request_filename) {
 rewrite ^(.*) http://www.jb200.com/index.html break;
  #     add_header Cache-Control no-cache;
  #     add_header Cache-Control private;

当将add_header写在rewrite之后时,发现add_header竟然不起作用了。
apache的mod_expires模块使得在使用expires头时能像max-age那样以相对的方式设置日期,通过ExpiresDefault指令完成。

例如:图片等过期时间为请求开始的10年之后
 

复制代码 代码示例:
<FileMatch ".(gif|jpg|js|css)$">
ExpiresDefault "access plus 10 years"
</FileMatch>
 

它像响应中发送Expires头和Cache-Control max-age头。

nginx缓存服务器静态文件
WebServer 2012-06-12 nginx,缓存
 
网站一经上线后,有些文件几乎都不常去更新了,比如css,js,图片等。减少HTTP请求是优化网站的最佳方案之一,我们可以利用nginx缓存服务器的静态文件。
在Nginx中可以使用nginx proxy_cache将用户的请求缓存到本地一个目录,当下一个请求时可以直接调取缓存文件,就不用去请求服务器了。
具体操作
打开nginx.conf配置文件
在http层级加入:
 

复制代码 代码示例:
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
 

在server层级加入:
 

复制代码 代码示例:
#要缓存文件的后缀,可以在以下设置。
location ~ .*.(gif|jpg|png|css|js)(.*) {
     proxy_pass http://appserver ;
     proxy_redirect off;
     proxy_set_header Host $host;
     proxy_cache cache_one;
     proxy_cache_valid 200 302 24h;
     proxy_cache_valid 301 30d;
     proxy_cache_valid any 5m;
     expires 90d;
}
 

说明:
1、http设置。
设置临时目录
proxy_temp_path /tmp/temp_dir;
设置缓存目录为二级目录,共享内存区大小,非活动时间,最大容量,临时目录要跟缓存目录在同一个分区。
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
 
2、server设置

设置缓存共享内存
proxy_cache cache_one;

设置http状态码为200,302缓存时间,24h为24小时
proxy_cache_valid 200 302 24h;

设置失期时间,90d为90天
expires 90d;

不进行缓存直接转到后端服务器
proxy_pass http://127.0.0.1:9000;