25人参与 • 2025-08-18 • Linux
gzip压缩是网站性能优化的重要手段,可以显著减少传输数据量,提高页面加载速度。本文将详细介绍如何在nginx中配置gzip压缩,包括各种参数的作用和优化建议。
gzip是一种文件压缩格式,也是http协议中广泛使用的压缩方法。当服务器启用gzip压缩后:
accept-encoding
头声明支持的压缩方式content-encoding
头告知客户端压缩效果通常能达到:
在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; # 更多配置... }
参数 | 默认值 | 说明 | 推荐值 |
---|---|---|---|
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 |
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
:压缩所有代理请求gzip_vary on; gzip_disable "msie [1-6]\.";
gzip_vary on
:添加vary: accept-encoding
头,帮助缓存服务器正确处理压缩内容gzip_disable
:对某些不支持gzip的旧浏览器禁用压缩,如ie6及以下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
不应压缩的文件类型:
sudo nginx -t
sudo systemctl reload nginx # 或 sudo service nginx reload
使用curl命令测试:
curl -h "accept-encoding: gzip" -i http://yourdomain.com | grep -i "content-encoding"
正常应返回:
content-encoding: gzip
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
压缩级别选择:
缓冲区设置:
gzip_buffers 16 8k
适用于大多数场景gzip_buffers 32 8k
最小文件大小:
gzip_min_length 1024
(1kb)动态内容缓存:
gzip_static on; # 优先使用预压缩的.gz文件
cpu负载监控:
%cpu
使用率,必要时降低gzip_comp_level
可能原因:
gzip_min_length
gzip_types
中accept-encoding
头)解决方案:
tail -f /var/log/nginx/error.log
解决方案:
排除特定文件类型:
location ~* \.(jpg|jpeg|png|gif|pdf|zip)$ { gzip off; }
或从gzip_types
中移除相应类型
解决方案:
降低压缩级别:
gzip_comp_level 4;
增加缓冲区:
gzip_buffers 32 8k;
对静态资源使用预压缩:
gzip_static on;
可以预先压缩静态文件,减少运行时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文件
虽然nginx不直接支持,但可以通过分离配置实现:
server { location ~* \.css$ { gzip_comp_level 9; } location ~* \.js$ { gzip_comp_level 6; } }
如果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压缩配置虽然简单,但合理优化可以显著提升网站性能。关键点包括:
通过本文的详细配置指南,您应该能够:
合理的gzip配置通常能使文本资源的传输大小减少60-80%,显著提升网站加载速度和用户体验。
以上就是nginx启用gzip压缩的完整配置指南的详细内容,更多关于nginx启用gzip压缩的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论