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

更新时间:
复制 MD 格式

说明

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

概述

本文主要介绍阿里云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这些缓存相关的响应头都没有携带,则默认不缓存。

相关文档

适用于

  • CDN