引言
gzip压缩是网站性能优化的重要手段,可以显著减少传输数据量,提高页面加载速度。本文将详细介绍如何在nginx中配置gzip压缩,包括各种参数的作用和优化建议。
一、gzip压缩的基本原理
gzip是一种文件压缩格式,也是http协议中广泛使用的压缩方法。当服务器启用gzip压缩后:
- 客户端请求时会通过
accept-encoding
头声明支持的压缩方式 - 服务器对响应内容进行压缩,并通过
content-encoding
头告知客户端 - 客户端收到响应后解压内容
压缩效果通常能达到:
- html文件:压缩率60-80%
- css/js文件:压缩率40-70%
- 图片/pdf等二进制文件:通常已压缩,效果不明显
二、nginx中gzip的基本配置
2.1 基本启用配置
在nginx配置文件中(通常位于/etc/nginx/nginx.conf
的http块内)添加:
http { # 启用gzip压缩 gzip on; # 设置压缩级别(1-9),6是推荐的平衡点 gzip_comp_level 6; # 设置最小压缩文件大小,小于此值不压缩 gzip_min_length 1024; # 设置用于压缩的缓冲区数量和大小 gzip_buffers 16 8k; # 设置需要压缩的mime类型 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 更多配置... }
2.2 配置参数详解
参数 | 默认值 | 说明 | 推荐值 |
---|---|---|---|
gzip | off | 开关gzip压缩 | on |
gzip_comp_level | 1 | 压缩级别(1-9),越高压缩率越大但cpu消耗越高 | 6 |
gzip_min_length | 20 | 最小压缩文件大小(字节),过小文件压缩可能适得其反 | 1024 |
gzip_buffers | 32 4k/16 8k | 压缩缓冲区数量和大小 | 16 8k |
gzip_types | text/html | 需要压缩的mime类型 | 见下文 |
gzip_proxied | off | 对代理请求的压缩行为 | 见下文 |
gzip_vary | off | 是否添加"vary: accept-encoding"头 | on |
gzip_disable | - | 对特定user-agent禁用gzip | 见下文 |
gzip_http_version | 1.1 | 启用压缩的最低http版本 | 1.1 |
三、高级配置选项
3.1 代理服务器相关配置
gzip_proxied any;
gzip_proxied
参数控制对代理请求的压缩行为,可选值:
off
:不对代理请求压缩expired
:如果响应头包含expires且已过期no-cache
:如果响应头包含cache-control:no-cacheno-store
:如果响应头包含cache-control:no-storeprivate
:如果响应头包含cache-control:privateno_last_modified
:如果响应头不包含last-modifiedno_etag
:如果响应头不包含etagauth
:如果响应头包含authorizationany
:压缩所有代理请求
3.2 浏览器兼容性配置
gzip_vary on; gzip_disable "msie [1-6]\.";
gzip_vary on
:添加vary: accept-encoding
头,帮助缓存服务器正确处理压缩内容gzip_disable
:对某些不支持gzip的旧浏览器禁用压缩,如ie6及以下
3.3 完整优化配置示例
http { gzip on; gzip_comp_level 6; gzip_min_length 1024; gzip_buffers 16 8k; gzip_proxied any; gzip_vary on; gzip_disable "msie [1-6]\."; gzip_http_version 1.1; gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/xml+rss application/atom+xml image/svg+xml font/ttf font/otf font/x-woff; # 其他配置... }
四、应该压缩的文件类型
推荐压缩的文件类型包括:
文本类文件:
text/html
(默认已包含)text/plain
text/css
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
web字体:
font/ttf
font/otf
font/x-woff
image/svg+xml
其他文本格式:
application/atom+xml
application/rss+xml
不应压缩的文件类型:
- 图片(png/jpeg/gif) - 通常已压缩
- pdf/doc等二进制文件 - 通常已压缩
- 已经压缩的文件(如.zip/.gz等)
五、配置验证与测试
5.1 检查配置语法
sudo nginx -t
5.2 重载nginx配置
sudo systemctl reload nginx # 或 sudo service nginx reload
5.3 测试压缩是否生效
使用curl命令测试:
curl -h "accept-encoding: gzip" -i http://yourdomain.com | grep -i "content-encoding"
正常应返回:
content-encoding: gzip
5.4 查看压缩效果
curl -h "accept-encoding: gzip" --compressed -o /dev/null -s -w "%{size_download}\n" http://yourdomain.com/style.css
与未压缩版本比较:
curl -o /dev/null -s -w "%{size_download}\n" http://yourdomain.com/style.css
六、性能优化建议
压缩级别选择:
- 1级压缩最快但压缩率低
- 9级压缩率最高但cpu消耗大
- 推荐使用6级作为平衡点
缓冲区设置:
gzip_buffers 16 8k
适用于大多数场景- 高流量网站可考虑
gzip_buffers 32 8k
最小文件大小:
- 过小文件压缩可能适得其反
- 推荐
gzip_min_length 1024
(1kb)
动态内容缓存:
gzip_static on; # 优先使用预压缩的.gz文件
cpu负载监控:
- 高压缩级别会增加cpu负担
- 监控
%cpu
使用率,必要时降低gzip_comp_level
七、常见问题解决方案
7.1 gzip压缩未生效
可能原因:
- 配置未正确加载
- 文件大小小于
gzip_min_length
- 文件类型不在
gzip_types
中 - 客户端不支持gzip(检查
accept-encoding
头)
解决方案:
- 检查nginx错误日志:
tail -f /var/log/nginx/error.log
- 确认配置已重载
- 使用curl测试验证
7.2 某些文件不应压缩
解决方案:
排除特定文件类型:
location ~* \.(jpg|jpeg|png|gif|pdf|zip)$ { gzip off; }
或从gzip_types
中移除相应类型
7.3 高cpu使用率
解决方案:
降低压缩级别:
gzip_comp_level 4;
增加缓冲区:
gzip_buffers 32 8k;
对静态资源使用预压缩:
gzip_static on;
八、进阶技巧
8.1 预压缩静态文件
可以预先压缩静态文件,减少运行时cpu消耗:
# 压缩单个文件 gzip -k -9 style.css # 批量压缩 find /var/www -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" \) -exec gzip -k -9 {} \;
nginx配置:
gzip_static on; # 优先使用预压缩的.gz文件
8.2 不同文件类型使用不同压缩级别
虽然nginx不直接支持,但可以通过分离配置实现:
server { location ~* \.css$ { gzip_comp_level 9; } location ~* \.js$ { gzip_comp_level 6; } }
8.3 brotli压缩(需要nginx支持)
如果nginx编译了brotli支持,可以配置更高效的brotli压缩:
brotli on; brotli_comp_level 6; brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
九、总结
nginx的gzip压缩配置虽然简单,但合理优化可以显著提升网站性能。关键点包括:
- 正确设置压缩级别和文件类型
- 平衡压缩率和cpu消耗
- 对静态资源考虑预压缩
- 监控实际效果和服务器负载
- 保持与浏览器兼容性
通过本文的详细配置指南,您应该能够:
- 正确启用和配置nginx的gzip压缩
- 理解各个参数的作用和优化方法
- 解决常见的配置问题
- 实施进阶的压缩优化策略
合理的gzip配置通常能使文本资源的传输大小减少60-80%,显著提升网站加载速度和用户体验。
以上就是nginx启用gzip压缩的完整配置指南的详细内容,更多关于nginx启用gzip压缩的资料请关注代码网其它相关文章!
发表评论