Nginx 高级配置 | gzip 压缩功能

Nginx gzip 压缩配置详解

免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn

Nginx 支持对特定类型的静态资源文件进行压缩,再将压缩后的数据传输给客户端。通过设置压缩比例,可以显著减小文件体积,有效降低出口带宽占用和服务器流量成本。​注意:​​ 压缩操作会消耗额外的 CPU 计算资源。

该功能由 ngx_http_gzip_module模块提供,该模块通常默认内置于 Nginx 中。

官方文档: https://nginx.org/en/docs/http/ngx_http_gzip_module.html

一、核心配置指令:

#启用或禁用gzip压缩,默认关闭
gzip on | off;

#压缩比由低到高从1到9,默认为1
gzip_comp_level level;

#禁用IE6 gzip功能
gzip_disable "MSIE [1-6]\.";

#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;

#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;

#指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_buffers number size;

#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...;

#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_vary on | off;

#预压缩,即直接从磁盘找到对应文件的gz后缀的式的压缩文件返回给用户,无需消耗服务器CPU
#注意: 来自于ngx_http_gzip_static_module模块
gzip_static on | off | always;

二、配置与测试示例

2.1 ​准备测试文件:​

# 复制一个大文件用于测试压缩效果
cp /etc/nginx/logs/access.log /data/nginx/html/pc/m.txt
# 创建一个小文件(小于 gzip_min_length 设置值)用于测试是否会被压缩
echo "test" > /data/nginx/html/pc/test.html

2.2 编辑 Nginx 配置文件 (nginx.confconf.d/下的文件)

gzip on;                     # 启用 Gzip 压缩
gzip_comp_level 5;           # 设置压缩级别为 5 (较好的平衡点)
gzip_min_length 1k;          # 仅压缩大于 1KB 的文件
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript image/gif image/png; # 指定需要压缩的文件类型
gzip_vary on;                # 添加 Vary: Accept-Encoding 响应头
# gzip_static on;            # (可选) 如果需要预压缩功能,取消注释并确保模块可用

2.3 重启 Nginx 服务

nginx -s reload  # 或在某些系统上使用 systemctl restart nginx

2.4 测试压缩功能

  • 测试小文件 (test.html< 1KB)
curl --head --compressed http://www.lhl.org/test.html
  • ​​预期结果 (部分关键响应头)
HTTP/1.1 200 OK
...
Content-Encoding: gzip     # 如果此行出现,表示文件被压缩了(但根据 gzip_min_length 1k 设置,小于 1K 的文件不应压缩,这可能表示实际文件 >=1K 或配置未生效)
  • 分析:​​ 由于设置了 gzip_min_length 1ktest.html内容仅包含 “test” (远小于 1KB),理论上 ​不应该​ 被压缩。Content-Encoding: gzip的出现可能意味着:

    • 文件实际大小 >=1KB (检查 ls -lh /data/nginx/html/pc/test.html)。

    • 配置未正确加载或生效 (检查 Nginx 错误日志 error.log)。

    • gzip_min_length设置在了错误的配置块或优先级被覆盖。


  • 测试大文件 (m.txt> 1KB)
curl --head --compressed http://www.lhl.org/m.txt
  • 预期结果 (部分关键响应头)
HTTP/1.1 200 OK
...
Vary: Accept-Encoding      # gzip_vary on; 生效
Content-Encoding: gzip     # 文件被 gzip 压缩
  • 分析:​​ 这确认了对于大于 gzip_min_length的文件,压缩功能工作正常

  • 验证未压缩的文件大小

    通常通过浏览器开发者工具查看未启用压缩 (Accept-Encoding头不包含 gzip) 或使用不带 --compressed参数的 curl来获取原始响应,并检查 Content-Length头来确定原始文件大小。

curl --head http://www.lhl.org/m.txt  # 不请求压缩
  • 预期结果
HTTP/1.1 200 OK
...
Content-Length: [原始文件大小]  # 例如 123456
...

再与启用压缩后(带 Content-Encoding: gzip)的响应中的 Content-Length值对比,即可看出压缩效果。

请不要以此视为定论,这只是我的个人经验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑疯雷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值