本文主要介绍阿里云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节点配置缓存过期时间