在 Nginx 中,可通过开启gzip压缩,来显著减少传输数据的大小(能减少一半甚至更多),提升加载速度,节省服务器宽带。
配置示例
在 Nginx 配置文件http块中添加:
http {
gzip on; # 启用 gzip 压缩
gzip_min_length 1k; # 大于1KB的文件才压缩
gzip_buffers 4 16k; # 缓冲区大小
gzip_comp_level 4; # 压缩级别
gzip_types text/plain text/css text/javascript text/html; # 指定要压缩的文件类型
gzip_vary on; # 添加 Vary: Accept-Encoding 响应头
}
需重启 Nginx 才能生效;
验证压缩是否生效
查看响应头中是否有Content-Encoding: gzip;使用curl命令示例:
curl -H "Accept-Encoding: gzip" -I http://hostname
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Thu, 08 Jan 2026 10:31:53 GMT
Content-Type: text/html; charset=utf-8
Last-Modified: Thu, 18 Dec 2025 07:53:29 GMT
Connection: keep-alive
ETag: W/"6943b2f9-655"
Content-Encoding: gzip
配置指令
可在http、server、location块中使用;
推荐在http块中设置全局默认值,在server块按站点调整,在location块做精细优化;
启用或禁用gzip
语法: gzip on | off;
默认: gzip off;
启用或禁用响应数据的gzip压缩;
设置缓冲区大小gzip_buffers
语法: gzip_buffers number size;
默认: gzip_buffers 32 4k|16 8k;
number:表示缓冲区的数量,最小值为1;size:表示缓冲区的大小,单位为k(KB)或m(MB),通常设置为与内存页大小对齐; 默认情况下,缓冲区大小等于一个内存页,根据平台有所不同;
内存使用计算:
gzip_buffers 32 4k;
# 每个连接: 32 × 4KB = 128KB
# 100个并发: 100 × 128KB = 12.8MB
设置压缩级别gzip_comp_level
语法: gzip_comp_level level;
默认: gzip_comp_level 1;
level:压缩级别,范围为1到9;值越大压缩效果越好,相应的 CPU 开销也越大;
从级别6开始,提升压缩级别会显著增加 CPU 消耗,但压缩率的提升越来越小;推荐在生产环境使用3或4;
对匹配的 User-Agent 禁用压缩gzip_disable
语法: gzip_disable regex ...;
默认: 未设置
regex是一个正则表达式,对匹配regex的 User-Agent 客户端禁用 gzip 压缩;例如:
# 以下情形 gzip 压缩将被禁用
gzip_disable "MSIE [1-6]\."; # IE6及更早版本
gzip_disable "Mobile"; # 包含"Mobile"的UA
gzip_disable "Android 2\."; # Android 2.x
gzip_disable "curl"; # 禁用curl请求
设置最低的 HTTP 协议版本gzip_http_version
语法: gzip_http_version 1.0 | 1.1;
默认: gzip_http_version 1.1;
设置启用 gzip 压缩的最低 HTTP 协议版本;
设置最小文件大小gzip_min_length
语法: gzip_min_length length;
默认: gzip_min_length 20;
设置启用 gzip 压缩的最小文件大小;示例:
http {
gzip on;
# 1KB以下的文件不压缩
gzip_min_length 1k;
}
设置代理请求是否进行压缩gzip_proxied
语法: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
默认: gzip_proxied off;
控制对代理请求的响应是否进行 gzip 压缩;
请求是否为代理由请求头中是否存在Via字段决定;
| 参数 | 说明 |
|---|---|
off |
禁用所有代理请求的压缩 |
expired |
响应头包含Expires字段且已过期,则启用压缩; |
no-cache |
响应头包含Cache-Control: no-cache,则启用压缩; |
no-store |
响应头包含Cache-Control: no-store,则启用压缩; |
private |
响应头包含Cache-Control: private,则启用压缩; |
no_last_modified |
响应头没有Last-Modified字段,则启用压缩; |
no_etag |
响应头没有ETag字段,则启用压缩; |
auth |
响应头包含Authorization字段,则启用压缩; |
any |
启用所有代理请求的压缩 |
指定 MIME 类型gzip_types
语法: gzip_types mime-type ...;
默认: gzip_types text/html;
应避免已经是压缩格式的内容;
指定哪些 MIME 类型的响应应该进行 gzip 压缩,默认情况下只压缩 HTML;示例:
http {
gzip on;
# 压缩常见文本类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
gzip_vary指令
语法: gzip_vary on | off;
默认: gzip_vary off;
在响应头中添加Vary: Accept-Encoding;