5-nginx Gzip

nginx.jpg

Nginx Gzip 压缩

Gzip 压缩通过在线实时压缩响应数据,显著减少传输的数据量,从而节省带宽并提高页面加载速度。虽然这会消耗一定的 CPU 资源,但总体上可以提升用户体验。Nginx 提供了 ngx_http_gzip_module 模块来实现这一功能。

开启或关闭 Gzip

使用 gzip 指令来开启或关闭 Gzip 压缩。

1
gzip on;

设置 Gzip 缓冲区大小

gzip_buffers 指令设置用于 Gzip 压缩的缓存空间大小。

1
gzip_buffers 4 16k;
  • NUMBER: 空间数
  • SIZE: 每个缓存空间的大小

设置 Gzip 压缩级别

gzip_comp_level 指令设置压缩级别,范围为 1 到 9,数值越大压缩比越高,但压缩时间也越长。通常建议设置为 5。

1
gzip_comp_level 5;

针对特定客户端禁用 Gzip

gzip_disable 指令可以根据客户端的 User-Agent 字符串选择性地禁用 Gzip 压缩。支持正则表达式。

1
gzip_disable "MSIE [1-6]\.";

例如,低版本的 IE 浏览器不支持 Gzip 压缩,可以禁用。

设置最小压缩数据大小

gzip_min_length 指令设置压缩数据的最小大小,防止对太小的数据进行压缩导致数据变大。

1
gzip_min_length 1k;

指定 MIME 类型进行压缩

gzip_types 指令指定哪些 MIME 类型的数据需要进行压缩。默认情况下,只有 text/html 会被压缩。可以设置为 * 来压缩所有类型的数据。

1
gzip_types text/plain application/x-javascript text/css text/html application/xml application/json;

发送 Vary 头

gzip_vary 指令发送 Vary: Accept-Encoding 头,告知接收方数据经过了压缩,这对于不支持 Gzip 的客户端很有帮助。

1
gzip_vary on;

使用静态 Gzip 压缩

gzip_static 指令允许 Nginx 直接提供预压缩的文件,而不是在每次请求时动态压缩。这可以显著减少 CPU 使用率,但需要预先生成 .gz 文件。

1
gzip_static on;

预压缩文件

为了使用 gzip_static,你需要预先生成 .gz 文件。可以使用以下命令生成:

1
gzip -c /path/to/file > /path/to/file.gz

示例配置

以下是一个综合的 Nginx Gzip 压缩配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
http {
gzip on;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 1k;
gzip_types text/plain application/x-javascript text/css text/html application/xml application/json;
gzip_vary on;
gzip_static on;

server {
listen 80;
server_name example.com;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

location /static/ {
root /var/www/html;
gzip_static on; # 对静态文件使用预压缩
}
}
}

注意事项

  1. CPU 资源:Gzip 压缩会占用 CPU 资源,特别是在高并发环境下。可以通过调整压缩级别和缓存大小来平衡 CPU 使用率和压缩效果。
  2. 预压缩:对于静态文件,建议使用预压缩来减少 CPU 开销。
  3. 浏览器兼容性:确保目标浏览器支持 Gzip 压缩,特别是旧版本的浏览器。

通过以上配置和优化,你可以有效地利用 Gzip 压缩来提升 Nginx 服务器的性能和用户体验。