架构:

后端apache+php
nginx代理
CDN回源到nginx

需求:

当代码输出了缓存时间头的时候,优先取代码层面设置的,当代码未输出缓存时间头的时候,取nginx配置的默认值

配置:
#nginx location内配置:
add_header Cache-Control $upstream_http_cache_control; #取后端apache/程序传过来的头
expires 2h;  #设置默认值
#cache-control优先级是高于expires的,所以可以达到效果
测试代码
<?php
//当程序输出下面的头时,cdn节点缓存时间会以下面的为准,无下面的头时,则以nginx设置的expires为准
header('Cache-Control: max-age=300');
主要技术点

nginx取后端机的自定义头是$upstream_http_xxx,这种格式,网上说的$sent_http_xxx,测试效果不是很好