Nginx通过gzip压缩与cache缓存协同优化静态资源:gzip精准压缩文本类资源并设最小长度、中等等级及vary头,预压缩.gz文件绕过运行时开销;缓存按资源稳定性分层设置max-age与immutable,并配合sendfile、open_file_cache等底层调优。

Linux 下 Nginx 通过 gzip 压缩 和 cache 缓存 协同优化静态资源,核心是“少传字节 + 少发请求”:压缩降低单次传输体积,缓存减少重复传输次数。两者必须配合使用,否则只压不缓,带宽省得有限;只缓不压,缓存内容本身仍臃肿。
精准启用 gzip,避开无效压缩
文本类资源(HTML、CSS、JS、JSON、SVG)压缩收益高,非文本资源(JPG、PNG、WOFF2、MP4)禁用压缩——既无效果,又白耗 CPU。
- 开启并限定类型:gzip on; + gzip_types text/css application/javascript text/html application/json application/xml;(不用
*,防误压) - 设最小长度:gzip_min_length 1024;(小于 1KB 的文件跳过压缩,避免压缩后反而变大)
- 中等压缩等级:gzip_comp_level 5;(平衡 CPU 开销与压缩率,6~9 级提升有限但开销陡增)
- 必加协商头:gzip_vary on;(让 CDN 或代理知道响应可能被压缩,避免缓存错乱)
用预压缩(.gz 文件)绕过运行时开销
启用 sendfile 时,Nginx 无法在内核态做 gzip 压缩。直接返回预生成的 .gz 文件,零 CPU 换带宽节省。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 构建阶段生成
app.js.gz、style.css.gz等同名压缩文件,并确保权限可读 - 启用模块:gzip_static on;(自动匹配并返回 .gz 文件,无需改 URL)
- 兼容旧客户端:gzip_http_version 1.0;
分层设置缓存策略,让浏览器“信得久、不重问”
缓存不是全开 max-age 就行,关键是区分资源稳定性:指纹化资源(含哈希)可永久缓存;通用资源(如 logo.png)需校验机制。
- 对带哈希的资源(
main.a1b2c3.js):add_header Cache-Control "public, immutable, max-age=31536000"; + expires 1y; - 对无哈希的通用资源(
favicon.ico):add_header Cache-Control "public, max-age=2592000";(30 天)+ 启用 etag on; 支持 304 校验 - 排除带查询参数的请求:if ($args != "") { add_header Cache-Control "no-cache"; break; }(防止 ?v=1.2.3 污染缓存键)
配套调优,放大 gzip + cache 效果
光配 gzip 和 cache 不够,还需底层传输和文件访问协同优化。
- 启用零拷贝:sendfile on; + tcp_nopush on;(填满 TCP 包再发,减少小包数量)
- 缓存文件元信息:open_file_cache max=10000 inactive=60s; + open_file_cache_valid 30s;(减轻突发流量下的磁盘 I/O 压力)
- 静态 location 内关闭日志:access_log off;(避免日志写入占用带宽和磁盘 I/O)

















