Nginx源站缓存过期时间的配置方法

免责声明:本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

本文主要介绍阿里云CDN配置中,Nginx服务的源站如何配置缓存过期时间。

详细信息

在Nginx服务器上,执行编辑/etc/nginx/nginx.conf配置文件,配置缓存过期时间,配置示例如下:

  • 示例一:设置GIF、JPG、JPEG、PNG、BMP、SWF文件的缓存时间为30天,JS、CSS文件的缓存时间为12小时。
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
            error_log /dev/null;
            access_log /dev/null;
        }
        
        location ~ .*\.(js|css)?$
        {
            expires      12h;
            error_log /dev/null;
            access_log /dev/null; 
        }
  • 示例二:设置HTM、HTML文件的缓存时间为3600秒。
    location / {
        access_log/data/nginx/log/xxx.log api;
        root/home/www/html;
        if ($request_filename ~ .*\.(htm|html)$)
         {
                add_header Cache-Control public, max-age=3600;
         }
    }

更多信息

CDN节点在收到源站响应的静态文件资源时,会按照以下的缓存规则来执行(数值越小,优先级越高):

  • 如果源站响应pragma:no-cache,不缓存。
  • 如果源站响应cache-control:no-cache(或者no-store,或者max-age=0),不缓存。
  • CDN控制台设置的缓存过期时间或者状态码过期时间。
  • 源站响应中使用cache-control设置过期时间,并且cache-control既不等于no-cache,也不等于no-store,取值为max-age,并且max-age大于0,例如:cache-control:max-age=3600
  • 源站响应中使用expires设置过期时间,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT
  • 如果源站响应中携带了ETaglast-modified,则使用以下规则来计算缓存时间:
    • last-modified,使用公式(当前时间-last_modified)* 0.1,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。
    • 只有ETag,缓存10秒
  • 如果源站返回的数据中ETaglast-modifiedcache-controlexpires这些缓存相关的响应头都没有携带,则默认不缓存。

相关文档

适用于

  • CDN