文章目录
免费个人运维知识库,欢迎您的订阅: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.conf或 conf.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 1k,test.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值对比,即可看出压缩效果。
请不要以此视为定论,这只是我的个人经验
Nginx gzip 压缩配置详解
674

被折叠的 条评论
为什么被折叠?



