---
title: Nginx缓存与Brotli压缩策略实践
keywords:
- Nginx
- 缓存
- Brotli
- Gzip
- Cache-Control
- 变更验证
description: 配置Nginx响应缓存与Brotli压缩以提升性能,提供可验证的server与头部策略,兼顾命中率与兼容性。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:通过合理的缓存头与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压缩策略,可显著提升响应性能与节省带宽,同时需要正确的变更验证与兼容策略保障数据正确性。

发表评论 取消回复