Nginx之gzip压缩和解压
一、概述
Nginx是一款高性能的Web服务器,它也能够充当反向代理服务器和负载均衡器。在Web应用开发中,优化网站速度是一个非常重要的工作。使用gzip压缩和解压缩技术,可以有效减小传输文件的大小,提升网站的访问速度。
二、开启gzip压缩
首先,需要在Nginx的配置文件中开启gzip压缩。通常,Nginx的配置文件位于/etc/nginx/nginx.conf。
打开配置文件,并找到http模块下的gzip配置项,如下所示:
http {
# 开启gzip压缩
gzip on;
# 排除不支持 gzip 的浏览器(如 IE6)
gzip_disable "msie6";
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
text/plain # 纯文本
text/css # CSS 样式
application/javascript; # JS 脚本
# ...
}
gzip on:表示开启gzip压缩功能。gzip_disable "msie6":表示禁用对msie6浏览器的gzip压缩功能,因为该浏览器对gzip压缩的支持存在问题。gzip_types:指定需要进行gzip压缩的文件类型。
三、常用配置
3.1 配置gzip压缩级别
示例配置如下:
http {
# 开启gzip压缩
gzip on;
# 排除不支持gzip的浏览器(如IE6)
gzip_disable "msie6";
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
text/plain # 纯文本
text/css # CSS 样式
application/javascript; # JS 脚本
# 压缩级别(1-9,级别越高压缩率越高,CPU消耗越大,推荐6)
gzip_comp_level 6;
# ...
}
在上述gzip配置项下添加gzip_comp_level配置项,它表示gzip压缩的级别。级别范围从1到9,数字越大压缩率越高,但同时也会增加压缩的时间。
在上述配置中,gzip_comp_level被设置为6,表示gzip压缩的级别。
3.2 配置gzip压缩缓冲区大小
示例配置如下:
http {
# 开启gzip压缩
gzip on;
# 排除不支持gzip的浏览器(如IE6)
gzip_disable "msie6";
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
text/plain # 纯文本
text/css # CSS 样式
application/javascript; # JS 脚本
# 压缩级别(1-9,级别越高压缩率越高,CPU消耗越大,推荐6)
gzip_comp_level 6;
# 压缩缓冲区(用于临时存储压缩数据,16个8k缓冲区)
gzip_buffers 16 8k;
#...
}
在上述gzip配置项下添加gzip_buffers配置项,表示压缩缓冲区的大小。默认情况下,Nginx会根据响应内容自动分配压缩缓冲区。但是,如果您对压缩缓冲区的大小有特殊要求,可以进行配置。
在上述配置中,gzip_buffers被设置为16 8k,表示分配16个8k大小的压缩缓冲区。
3.3 配置gzip压缩最小文件大小
示例配置如下:
http {
# 开启gzip压缩
gzip on;
# 排除不支持gzip的浏览器(如IE6)
gzip_disable "msie6";
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
text/plain # 纯文本
text/css # CSS 样式
application/javascript; # JS 脚本
# 压缩级别(1-9,级别越高压缩率越高,CPU消耗越大,推荐6)
gzip_comp_level 6;
# 压缩缓冲区(用于临时存储压缩数据,16个8k缓冲区)
gzip_buffers 16 8k;
# 最小压缩文件大小(小于此值的文件不压缩,避免反增体积,单位:字节)
gzip_min_length 256;
#...
}
在上述gzip配置项下添加gzip_min_length配置项,表示进行gzip压缩的最小文件大小。只有当文件大小超过该值时,才会进行gzip压缩。
在上述配置中,gzip_min_length被设置为256,表示文件大小超过256字节才会进行gzip压缩。
四、动态内容压缩
Nginx不仅能压缩静态文件(如JS、CSS),还能对动态生成的内容(如PHP、Node.js输出)启用压缩。关键配置:
location / {
# 对动态代理的响应启用压缩(如反向代理后端服务时)
gzip_proxied any; # 对代理请求的响应启用压缩
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
application/json
application/xml; # 补充动态内容的MIME类型
#...
}
适用场景:
API接口返回的JSON/XML数据- 动态渲染的
HTML页面 - 注意:需确保后端服务未提前压缩内容,避免重复压缩
五、完整配置示例
经过以上配置后,Nginx会自动对客户端请求的合适文件进行gzip压缩。当客户端请求的文件被gzip压缩后,Nginx会自动添加"Content-Encoding: gzip"的响应头,同时会对响应内容进行解压缩。
实际上,Nginx不仅可以对文件进行gzip压缩和解压缩,还可以对动态生成的响应内容进行gzip压缩。对于动态生成的响应内容,可以通过设置相关的页面编码头实现gzip压缩,如下所示:
http {
# 开启gzip压缩
gzip on;
# 排除不支持 gzip 的浏览器(如 IE6)
gzip_disable "msie6";
# 压缩级别(1-9,级别越高压缩率越高,CPU 消耗越大,推荐 6)
gzip_comp_level 6;
# 压缩缓冲区(用于临时存储压缩数据,16个8k缓冲区)
gzip_buffers 16 8k;
# 最小压缩文件大小(小于此值的文件不压缩,避免反增体积,单位:字节)
gzip_min_length 256;
# 指定压缩的文件类型(必须显式声明,否则不压缩)
gzip_types
text/plain
text/css
text/javascript
application/javascript
application/json
application/xml
text/html;
# 动态内容压缩(按需添加)
location /api {
# 对动态代理的响应启用压缩(如反向代理后端服务时)
gzip_proxied any;
#...
}
}
配置生效与验证:
- 重启Nginx:
systemctl restart nginx - 验证方法:用
curl -I -H "Accept-Encoding: gzip" https://你的域名/index.css,若响应头包含Content-Encoding: gzip则表示配置生效
六、总结
通过合理配置Nginx Gzip,文本类资源的传输体积可减少60%~80%,尤其对移动端用户和低带宽环境友好。记得根据服务器硬件性能和业务场景微调参数,在压缩效果与CPU消耗间找到最佳平衡点。

浙公网安备 33010602011771号