概述 - 目标:通过合理的缓存头与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压缩策略,可显著提升响应性能与节省带宽,同时需要正确的变更验证与兼容策略保障数据正确性。

发表评论 取消回复