概述

  • 目标:通过合理的缓存头与Nginx压缩策略减少回源与带宽,提升终端加载性能与可用性。
  • 适用:静态资源与API响应的可缓存场景。

核心与实战

  • 启用Brotli与Gzip(编译或动态模块):
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;

gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
  • 静态资源缓存策略:
location /static/ {
    root /var/www;
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri $uri.br $uri.gz =404;
}
  • API缓存与变更验证:
location /api/ {
    proxy_pass http://api;
    proxy_cache api_cache;
    proxy_cache_valid 200 1m;
    proxy_cache_bypass $http_cache_control;
    add_header Vary "Accept-Encoding";
    add_header Cache-Control "public, max-age=60";
    if_modified_since exact;
    etag on;
}

proxy_cache_path /var/cache/nginx/api levels=1:2 keys_zone=api_cache:100m inactive=10m use_temp_path=off;

示例

  • 验证压缩与缓存:
curl -I https://example.com/static/app.js
curl -H 'Accept-Encoding: br' -I https://example.com/static/app.js
curl -I https://example.com/api/items
  • 命中检查:
add_header X-Cache $upstream_cache_status;

验证与监控

  • 头部与响应体:
  • 检查`Content-Encoding: br/gzip`与`Cache-Control`;正确变更验证通过`ETag/If-None-Match`。
  • 命中率:
  • 观察`$upstream_cache_status`与带宽变化;优化缓存键与变体。
  • 兼容性:
  • 对不支持Brotli的客户端回退到Gzip或未压缩版本。

常见误区

  • 为动态API设置过长`max-age`导致数据过期;需短期或使用ETag/Last-Modified。
  • 未设置`Vary`导致缓存污染;需根据编码或其他头变体设置Vary。
  • 未提供`.br/.gz`静态文件导致回退失败;需构建时生成并部署。

结语

  • 通过Nginx缓存与Brotli压缩策略,可显著提升响应性能与节省带宽,同时需要正确的变更验证与兼容策略保障数据正确性。


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部