Nginx开启Gzip压缩
Nginx开启Gzip压缩
引言
HTML、CSS、JS、JSON这类文本资源直接传输体积大,首屏慢。Nginx开启Gzip后,服务端先压缩再发送,浏览器解压,通常文本体积能减少60%以上,是零成本提升访问速度的手段。
配置示例
在http块或server块加入:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
参数说明
- gzip on:开关;
- gzip_min_length:小于1k不压缩,避免小文件压缩得不偿失;
- gzip_comp_level:压缩等级1-9,6比较均衡,太高CPU占用大;
- gzip_types:指定压缩的MIME类型,text/html默认自带;
- gzip_vary on:响应加Vary:Accept-Encoding,避免缓存问题;
- gzip_disable:兼容老旧IE浏览器。
生效验证
改完执行nginx -t检查语法,再reload。浏览器F12网络面板看响应头Content-Encoding:gzip即生效。
注意事项
- 图片、视频、PDF本身已压缩,不要再gzip,浪费CPU;
- 压缩等级不要盲目拉满,大文件压缩吃CPU;
- 静态资源可在CDN层提前压缩;
- 配合Brotli现代压缩效果更好,需Nginx额外模块支持。
总结
Gzip是文本类资源提速标配,开启后配置类型、大小阈值、合理压缩等级,reload生效,用响应头验证。不压缩图片视频,平衡传输体积与服务器CPU。
Nginx配置Gzip压缩,提升网站加载速度
前言
网站打开慢?带宽不够?开启Nginx的Gzip压缩,能把文件体积压缩70%以上,加载速度立马提升好几倍。本文讲怎么配置。
一、什么是Gzip
Gzip是一种压缩算法,Nginx在发给浏览器之前先把文件压缩,浏览器收到后自动解压。
效果:
- HTML/CSS/JS文件压缩70%左右
- 减少带宽
- 加载更快
二、配置Gzip
打开Nginx配置文件:
vi /etc/nginx/nginx.conf
在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 image/svg+xml;
gzip_vary on;
gzip_buffers 16 8k;
gzip_http_version 1.1;
参数解释
| 参数 | 含义 |
|---|---|
| gzip on | 开启gzip |
| gzip_min_length 1k | 小于1k的文件不压缩 |
| gzip_comp_level 6 | 压缩级别1-9,6最合适 |
| gzip_types | 压缩哪些类型的文件 |
| gzip_vary on | 给响应头加Vary: Accept-Encoding |
| gzip_buffers | 压缩缓冲区 |
压缩级别说明
| 级别 | 效果 |
|---|---|
| 1 | 最快,压缩率最低 |
| 6 | 推荐,平衡 |
| 9 | 最慢,压缩率最高 |
推荐用6,不要用9,太吃CPU。
三、验证配置
nginx -t
重载Nginx:
nginx -s reload
四、验证是否生效
方法1:curl测试
curl -I -H "Accept-Encoding: gzip" https://www.0454.wang/
看到响应头有:
Content-Encoding: gzip
就是生效了。
方法2:浏览器F12
按F12打开开发者工具 → Network → 点请求 → 看Response Headers:
Content-Encoding: gzip
五、哪些文件该压缩
该压缩的
- HTML文件
- CSS文件
- JS文件
- JSON数据
- SVG图片
不该压缩的
- 图片(jpg/png):本身已经压缩过了
- 视频:太大,压缩没意义
- 压缩包(zip/rar):已经压缩过了
六、常见坑
坑1:只在http段配了,但server段覆盖了
检查: 看server段有没有gzip off。
坑2:gzip_types没写全
问题: JS文件没压缩。
解决: 加上application/javascript。
坑3:压缩级别太高
问题: 用了9,CPU飙升。
解决: 改成6。
坑4:CDN缓存了旧文件
问题: 配置了gzip但CDN没生效。
解决: 刷新CDN缓存。
七、完整配置示例
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 image/svg+xml;
gzip_vary on;
gzip_buffers 16 8k;
gzip_http_version 1.1;
server {
listen 80;
server_name www.0454.wang;
root /var/www/html;
index index.html;
}
}
八、对比效果
没开Gzip
HTML文件:100KB
开了Gzip
HTML文件:25KB
省了75%!
总结
记住:
- 开启gzip on
- 压缩级别用6
- gzip_types要写全
- 图片不要压缩
- 用curl验证是否生效
最常用配置:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_vary on;
遇到问题加QQ23979811 协助处理
Nginx配置gzip压缩,提升网站加载速度
前言
网站打开慢?Nginx 开个 gzip 压缩,能把传输体积压缩 70% 以上,用户打开快很多,还省带宽。对 SEO 也有帮助。
什么是 gzip 压缩
gzip 是一种压缩算法。Nginx 把 HTML、CSS、JS 等文本文件压缩后再发给浏览器,浏览器收到后自动解压。
比如一个 100KB 的 CSS 文件,压缩后可能只有 20KB。
配置方法
在 Nginx 配置文件里加 gzip 相关配置。
基础配置
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_vary on;
完整示例
server {
listen 80;
server_name www.example.com;
root /var/www/html;
index index.html;
# gzip 压缩
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_vary on;
}
参数说明
| 参数 | 说明 |
|---|---|
gzip on |
开启 gzip |
gzip_min_length 1k |
小于 1KB 的文件不压缩 |
gzip_comp_level 6 |
压缩级别 1-9,6 最合适 |
gzip_types |
压缩哪些类型的文件 |
gzip_vary on |
给响应头加 Vary: Accept-Encoding |
测试是否生效
方法一:浏览器 F12
打开浏览器开发者工具 → Network → 点一个 CSS/JS 文件 → 看 Response Headers 里有没有:
Content-Encoding: gzip
有就说明生效了。
方法二:curl 命令
curl -I -H "Accept-Encoding: gzip" https://www.example.com/style.css
看返回头里有没有 Content-Encoding: gzip。
常见坑
坑1:图片也压缩
配置里把图片类型也加上了。
问题: 图片(jpg/png)本身已经是压缩过的格式,再 gzip 没意义,还浪费 CPU。
解决: 只压缩文本文件,图片不用压。
坑2:压缩级别太高
设成了 9,以为压缩越狠越好。
问题: 级别太高会占用更多 CPU,压缩时间长,反而拖慢响应。
解决: 用 6 就够了,性价比最高。
坑3:PHP 页面没压缩
HTML 压缩了,但 PHP 输出的页面没压缩。
原因: PHP 页面已经被 PHP-FPM 压缩过了,Nginx 不会再压。
解决: 不用管,PHP 那边自己处理就行。
坑4:CDN 后面 gzip 不生效
用了 CDN,回源开了 gzip,但用户那边没压。
原因: CDN 回源拿的是压缩后的文件,CDN 缓存了。
解决: 刷新 CDN 缓存,或者 CDN 那边也开 gzip。
总结
开 gzip 就这几行配置:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript;
gzip_vary on;
记住: 文本文件压,图片别压;压缩级别用 6 就行。
遇到问题加QQ23979811 协助处理
Linux 压缩命令大全
Linux 常用压缩命令大全
Linux 下压缩解压命令很多,记不住每次都要搜,整理一份常用清单。
1. tar 命令(最常用)
tar 是 Linux 最常用的打包工具,可以配合不同压缩格式。
打包不压缩:
# 打包
tar -cvf blog.tar /www/wwwroot/blog/
# 解包
tar -xvf blog.tar
参数说明:
- -c:创建打包文件
- -x:解包
- -v:显示过程
- -f:指定文件名
2. tar.gz 格式(最常用)
# 压缩
tar -zcvf blog.tar.gz /www/wwwroot/blog/
# 解压
tar -zxvf blog.tar.gz
# 解压到指定目录
tar -zxvf blog.tar.gz -C /data/backup/
-z 就是用 gzip 压缩,这是最常用的格式。
3. tar.bz2 格式(压缩率更高)
# 压缩(体积更小,但更慢)
tar -jcvf blog.tar.bz2 /www/wwwroot/blog/
# 解压
tar -jxvf blog.tar.bz2
4. zip 格式
# 压缩
zip -r blog.zip /www/wwwroot/blog/
# 解压
unzip blog.zip
# 解压到指定目录
unzip blog.zip -d /data/backup/
Windows 用户常用 zip 格式,跨平台方便。
5. gz 格式
# 压缩(单个文件)
gzip file.log
# 解压
gunzip file.log.gz
gzip 只能压单个文件,一般和 tar 配合用。
6. 查看压缩包内容
# 查看 tar 包内容
tar -tvf blog.tar
# 查看 tar.gz 包内容
tar -ztvf blog.tar.gz
# 查看 zip 包内容
unzip -l blog.zip
7. 常用场景示例
备份网站文件:
tar -zcvf backup_$(date +%Y%m%d).tar.gz /www/wwwroot/blog/
备份数据库:
mysqldump -u root -p123456 blog | gzip > db_$(date +%Y%m%d).sql.gz
传输文件压缩:
tar -zcvf - /www/wwwroot/blog/ | ssh root@192.168.1.100 "tar -zxvf - -C /backup/"
8. 总结
| 格式 | 压缩率 | 速度 | 命令 |
|---|---|---|---|
| tar.gz | 中 | 快 | tar -z |
| tar.bz2 | 高 | 慢 | tar -j |
| zip | 中 | 中 | zip/unzip |
| tar | 无 | 最快 | tar |
日常用 tar.gz 就够了,跨平台用 zip,追求小体积用 bz2。
Nginx配置gzip压缩,提高网站加载速度
前言
网站加载慢,很大原因是没开压缩。CSS、JS 文件动辄几百 KB,开了 gzip 之后能压缩到原来的 1/3,加载速度提升明显。本文就讲一下怎么在 Nginx 里配置 gzip 压缩。
为什么要开 gzip
举个例子:
- 一个 CSS 文件原始大小 100KB
- 开了 gzip 之后变成 20KB
- 传输体积减少 80%
浏览器收到压缩内容后自动解压,用户无感知。
基础配置
在 nginx.conf 的 http 块里加上:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_vary on;
}
配置项说明
gzip on:
开启 gzip 压缩。
gzip_types:
哪些类型的文件需要压缩。
text/plain:文本text/css:CSSapplication/json:JSONapplication/javascript:JSimage/svg+xml:SVG 图片
gzip_min_length:
小于 1KB 的文件不压缩(压缩本身也占 CPU,小文件不值得压)。
gzip_comp_level:
压缩级别,1 到 9,6 比较合适(越大压得越狠,但越占 CPU)。
gzip_vary on:
给响应头加 Vary: Accept-Encoding,告诉 CDN 和缓存,这个内容是压缩过的。
完整示例
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_vary on;
gzip_buffers 16 8k;
gzip_http_version 1.1;
}
检查并重载
nginx -t
systemctl reload nginx
验证 gzip 是否生效
用 curl 测试
curl -H "Accept-Encoding: gzip" -I https://www.example.com
如果返回头里有:
Content-Encoding: gzip
说明 gzip 生效了。
用浏览器 F12 测试
打开浏览器 F12 → Network → 点一个 JS/CSS 文件 → Response Headers,看有没有 Content-Encoding: gzip。
注意事项
不要压缩图片
JPG、PNG 这些图片本身已经是压缩过的,再压 gzip 没什么效果,还浪费 CPU。所以 gzip_types 里不要加 image/jpeg、image/png 这些。
不要压缩太小的文件
太小的文件(比如小于 1KB)压缩完反而可能变大,所以用 gzip_min_length 过滤掉。
压缩级别不要太高
gzip_comp_level 设到 9 没意义,压不了多少,CPU 占用还高。6 就够了。
常见坑
坑1:开了 gzip 但没生效
配置写了,但浏览器看到的还是没压缩的。
排查:
- 看文件大小是不是小于
gzip_min_length - 看
gzip_types里有没有包含这种类型 - 看浏览器请求头里有没有
Accept-Encoding: gzip
坑2:HTML 没压缩
只压缩了 CSS 和 JS,HTML 没压缩。
原因: gzip_types 里没写 text/html。
注意: text/html 是默认就压缩的,不用写在 gzip_types 里。
坑3:CDN 缓存了没压缩的版本
开了 gzip,但 CDN 上缓存的还是旧的没压缩的文件。
解决: 清一下 CDN 缓存,或者等 CDN 自动更新。
总结
gzip 配置很简单,就几行:
| 配置项 | 推荐值 | 作用 |
|---|---|---|
gzip |
on |
开启压缩 |
gzip_types |
text/css application/javascript ... | 压缩哪些文件 |
gzip_min_length |
1k |
小于多少不压 |
gzip_comp_level |
6 |
压缩级别 |
gzip_vary |
on |
加 Vary 头 |
开了 gzip 网站加载速度立马快一截,零成本优化,一定要开。
遇到问题加QQ23979811 协助处理