nginx通过gzip压缩与多级缓存可显著缓解高负载压力:合理设置gzip_min_length、gzip_types、压缩级别6及gzip_vary;分层缓存静态资源(浏览器、文件描述符、反向代理);动态内容按用户态精细缓存;并防御无效流量冲击。

直接用 Nginx 的 Gzip 压缩和多级缓存,就能显著缓解高负载下的响应压力。核心不是堆硬件,而是让每次请求更轻、更少回源、更快返回。
开启智能 Gzip 压缩
压缩本质是减少传输体积,尤其对文本类资源效果明显。但盲目高压缩会拖慢 CPU,需平衡效率与开销:
-
只压够大的文件:设
gzip_min_length 256,避免小文件(如 tiny icon、空 JS)压缩反而增加开销 -
选准压缩对象:明确列出
gzip_types,覆盖text/css、application/javascript、application/json、text/html等,但跳过图片、视频等已压缩格式 -
压缩级别设为 6:比默认 1–3 更高效,又不像 9 那样吃 CPU;配合
gzip_buffers 16 8k避免频繁内存分配 -
必须加
gzip_vary on:让 CDN 或代理知道同一 URL 可能返回压缩/未压缩版本,防止缓存错乱
分层缓存静态资源
静态文件(JS/CSS/字体/图标)一旦部署就很少变动,应尽量不走后端,全链路缓存:
-
浏览器端缓存:在 location 块中配
expires 1y和add_header Cache-Control "public, immutable",让浏览器长期复用 -
服务器文件描述符缓存:启用
open_file_cache,例如max=1000 inactive=30s,减少重复 open() 系统调用 -
反向代理缓存(如用作前端网关):配置
proxy_cache_path+proxy_cache_valid 200 302 1h,对 API 响应或 HTML 页面做短时缓存
动态内容缓存要带粒度控制
用户登录态、个性化推荐页不能全缓,但可按状态码、URL 路径、请求头做精细缓存:
-
区分缓存策略:用
proxy_cache_key包含$scheme$host$request_uri$cookie_user_id,实现“登录用户 A 看 A 的缓存” -
避开敏感路径:对
/api/user/profile这类接口,用proxy_cache_bypass $http_pragma或if ($request_uri ~ ^/api/) { set $skip_cache 1; }主动跳过缓存 -
设置合理过期时间:非实时数据(如商品列表、博客归档)可设
proxy_cache_valid 200 10m,既减轻后端压力,又保证一定新鲜度
防御无效流量冲击缓存系统
爬虫、扫描器、重复刷页会快速填满缓存空间,甚至触发频繁回源:
-
限制缓存项生命周期:在
proxy_cache_path中设inactive=5m,5 分钟没被访问的缓存自动清理 -
拒绝低价值请求缓存:用
proxy_cache_bypass $arg_nocache $http_x_no_cache,支持通过 URL 参数或 Header 主动跳过缓存 -
配合限流使用:对高频 IP 或 UA,在缓存前先用
limit_req控制速率,避免恶意请求挤占缓存资源











