微信公众号
扫描关注微信公众号
博客大厅

如何配置 Nginx 的 gzip 压缩?

原创 来源:博客站 阅读 0 今天 07:34:10 听全文

在 Nginx 中启用 gzip 压缩可以显著减少传输数据量,提升网页加载速度,尤其对文本类内容(如 HTML、CSS、JS)效果明显。以下是详细的配置方法和优化建议:


1. 基础配置

httpserverlocation 块中添加以下指令:

http {
    # 启用 gzip 压缩
    gzip on;

    # 最小压缩文件大小(小于1K不压缩)
    gzip_min_length 1k;

    # 压缩级别(1-9,越高压缩率越大但CPU消耗越多,建议折中选6)
    gzip_comp_level 6;

    # 支持的MIME类型(需根据实际需求调整)
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 是否对代理请求生效(如后端服务已压缩可关闭)
    gzip_proxied any;

    # 添加Vary头,兼容代理缓存
    gzip_vary on;

    # 禁用对IE6的压缩(IE6兼容性差)
    gzip_disable "MSIE [1-6].";
}

2. 关键指令解析

指令 作用
gzip on 开启 gzip 压缩功能。
gzip_min_length 仅压缩大于指定大小的文件(避免小文件压缩后反而变大)。
gzip_comp_level 压缩级别(1-9),建议设为 6(平衡压缩率和CPU消耗)。
gzip_types 指定需要压缩的文件类型,常用文本类型已列出,可根据需求增减。
gzip_proxied 控制是否压缩代理请求(如 any 表示所有代理请求都压缩)。
gzip_vary 添加 Vary: Accept-Encoding 响应头,帮助缓存服务器正确处理压缩内容。
gzip_disable 对特定User-Agent(如IE6)禁用压缩。

3. 高级优化技巧

(1)预生成压缩文件

避免动态压缩的CPU开销,提前生成 .gz 文件:

location / {
    # 优先返回预压缩文件(如style.css.gz)
    gzip_static on;
    try_files $uri $uri/ =404;
}
  • 操作步骤
    gzip -k9 style.css  # 生成 style.css.gz(保留原文件)
    

(2)Brotli 压缩(更高压缩率)

若安装 ngx_brotli 模块,可替代或补充 gzip:

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml;

(3)动态压缩缓存

减少重复压缩消耗:

gzip_buffers 16 8k;     # 压缩缓冲区(数量+大小)
gzip_http_version 1.1;  # 仅对HTTP/1.1及以上协议压缩

4. 完整配置示例

http {
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied any;
    gzip_vary on;
    gzip_disable "MSIE [1-6].";

    # 预压缩文件支持
    gzip_static on;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            try_files $uri $uri/ /index.html;
        }

        # 单独为API关闭压缩(若API返回已压缩数据)
        location /api/ {
            gzip off;
            proxy_pass http://backend;
        }
    }
}

5. 验证压缩是否生效

方法1:检查响应头

curl -I -H "Accept-Encoding: gzip" http://example.com/style.css
  • 生效标志
    Content-Encoding: gzip
    Vary: Accept-Encoding
    

方法2:查看文件大小对比

curl -sH "Accept-Encoding: gzip" http://example.com/style.css | wc -c
curl -s http://example.com/style.css | wc -c

6. 注意事项

  1. CPU 与 压缩率的权衡

    • 压缩级别(gzip_comp_level)越高,CPU 消耗越大,建议生产环境设为 5-6
  2. 避免重复压缩

    • 若后端服务(如Node.js)已压缩响应,需在Nginx中关闭对应路由的 gzip
  3. 大文件压缩

    • 大文件(如视频)不建议压缩(消耗CPU且效果有限),可通过 gzip_min_length 排除。
  4. 缓存兼容性

    • 确保 gzip_vary on,否则可能导致代理服务器缓存错误版本。

性能对比(示例)

文件类型 原始大小 压缩后大小 压缩率
HTML 50KB 10KB 80%
CSS 100KB 20KB 80%
JavaScript 200KB 50KB 75%

通过合理配置 gzip,通常可减少 60%-80% 的文本类数据传输量,显著提升页面加载速度。

学在每日,进无止境!更多精彩内容请关注微信公众号。
原文出处: 内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/964.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。
轻松 一刻