Nginx中配置Cache-Control
Nginx默认配置只给文件生成ETag,没有添加Cache-Control相关的控制,造成Chrome浏览器默认当作永久缓存(除了在地址栏输入URL跳转时,才重新使用ETag校验)。
单页面应用网站的静态资源长期缓存策略:
- 主页index.html每次使用ETag校验。
- 其余资源(CSS/JS/Images等),根据其内容取HASH值提供唯一的URL路径。
但是,静态Blog网站一般都是很多个页面,且一篇Blog需确保URL地址不变,所以,需要使用不同的缓存控制策略。
静态Blog的Nginx缓存配置
先在 /etc/nginx/mime.types 中添加新字体文件的MIME类型:
font/woff woff;
font/woff2 woff2;
#application/font-woff woff;
然后,在Nginx配置文件/etc/nginx/sites-enabled/your-site的http上下文中,定义每种内容类型的缓存时间:
# Expires map
map $sent_http_content_type $blog_expires {
default epoch;
text/html epoch;
text/xml epoch;
text/css 7d;
application/javascript 7d;
application/font-woff 30d;
application/octet-stream 30d;
~font/ 30d;
~image/ 30d;
}
最后,在Nginx配置文件的http、server或location上下文中,添加缓存控制。如下,在Blogs日期开头的页面使用3天缓存,其余页面使用ETag校验,其余内容使用上面的$blog_expires:
# Cache control
expires $blog_expires;
# blogs, such as '/2019/10/abc/index.html'
location ~* ^(/en)?/\d\d\d\d/\d\d?/.+/(index\.html)?$ {
expires 3d;
try_files $uri $uri/ =404;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
参考: http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires