nginx对https流量的压缩发生在tls加密前的应用层,配置与http完全一致;需启用gzip模块、合理设置gzip_types及关键参数(如gzip_min_length、gzip_comp_level等),并通过curl验证content-encoding响应头。

Nginx 对 HTTPS 流量的压缩处理,本质上是对加密传输前的响应内容进行压缩(不是压缩 TLS 层本身),它和 HTTP 流量的压缩配置完全一致——因为压缩发生在应用层(HTTP 响应体生成后、TLS 加密前)。只要正确启用 Gzip(或 Brotli),HTTPS 站点就能获得同样的体积缩减效果。
以下是你需要关注的三个核心环节:
确保 gzip 模块已启用且作用于 HTTPS server 块
Nginx 默认编译时需包含 --with-http_gzip_static_module 和 --with-http_ssl_module。若你用包管理器安装(如 apt/yum),通常已内置;若自行编译,需确认参数。压缩功能由 http 块统一控制,不区分 HTTP/HTTPS,但必须确保 gzip on; 出现在 http { ... } 顶层作用域中,而非仅写在某个 server 块里。
合理设置 gzip_types 覆盖关键资源类型
HTTPS 下传输的 HTML、CSS、JS、JSON、SVG 等文本类资源最受益于压缩。建议显式声明,避免依赖默认仅 text/html 的窄范围:
-
text/plain text/css text/javascript application/javascript application/json text/xml application/xml application/xhtml+xml image/svg+xml - 不要对图片(jpg/png)、字体(woff2)、PDF 等二进制文件开启压缩——它们本身已压缩,强行 gzip 可能增大体积或无效。
注意兼容性与性能平衡的关键参数
-
gzip_min_length 1024:小于 1KB 的响应不压缩,避免小文件压缩开销反超收益 -
gzip_comp_level 6:压缩比与 CPU 消耗的较优平衡点(1 最快,9 最高压缩但耗 CPU) -
gzip_vary on:自动添加Vary: Accept-Encoding响应头,确保 CDN 或代理能正确缓存压缩/未压缩版本 -
gzip_http_version 1.1:兼容主流客户端,无需降级到 1.0 -
gzip_disable "MSIE [1-6]\.":可选,屏蔽老旧 IE 的兼容问题
示例完整 http 块片段:
http {
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# 其他 SSL 安全配置...
location / {
root /var/www/html;
index index.html;
}
}
}
验证是否生效:用 curl 检查 HTTPS 响应头
curl -I -H "Accept-Encoding: gzip" https://example.com/index.html
若返回头含 Content-Encoding: gzip,说明压缩已起效。
不复杂但容易忽略











