本文主要介绍阿里云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
  • 如果源站响应中携带了 ETag last-modified ,则使用以下规则来计算缓存时间:
  • last-modified ,使用公式 (当前时间-last_modified)* 0.1 ,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。
  • 只有 ETag ,缓存10秒
  • 如果源站返回的数据中 ETag last-modified cache-control expires 这些缓存相关的响应头都没有携带,则默认不缓存。
  • Nginx缓存策略设置
  • CDN节点配置缓存过期时间
  •