外观
压缩
Gzip 是一种常用的文件压缩格式,它通过压缩文本文件来减少数据的体积,从而加快数据的传输速度。在 Web 开发中,Gzip 通常用于压缩 HTTP 请求和响应体,特别是 HTML、CSS、JavaScript 等文本资源。Gzip 可以将网页文件(如 HTML、CSS、JavaScript 等)压缩至原文件的 30% 至 80% 左右。这样,浏览器加载这些文件时就会减少数据传输量,提升加载速度。
Gzip 压缩
gzip 的作用域有三块,分别是 http、server、location。
我们打开 nginx.conf 文件。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}可以看到 gzip 是被禁用的,我们启用。
同时我们还需要配置一下 gzip 压缩的类型,因为 nginx 默认只会给 application/x-script 类型压缩。
我们新增一行:
gzip_types application/javascript;我将网页默认文档设为 index.html,同时在此 html 文件内引入一个约 40KB 的 js 文件。
这是开启了 gzip 压缩的传输大小。

这是没有开启 gzip 压缩的传输大小。

Gzip 的功能配置有很多。
server {
gzip on;
gzip_types application/javascript application/json;
gzip_static on;
gzip_vary on;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_min_length 1k;
gzip_http_version 1.1;
location / {
root /opt/xxx/;
}
}| 参数 | 参考参数 | 作用 |
|---|---|---|
| gzip | on | 是否开启 gzip 压缩 |
| gzip_min_length | 1k | 最小压缩单位,小于 1k 压缩意义就不大了 |
| gzip_comp_level | 6 | 压缩级别,1-9可选,数字越大压缩效果越好,同时对 CPU 小号越大,高并发时不可调节过高 |
| gzip_types | js、css等 | 压缩类型,取值自 application/type,文本文件压缩效果最好 |
| gzip_vary | on | 用于在响应头添加 vary: accept-encoding 让代理服务器根据请求头判断是否开启了 Gzip 压缩 |
| gzip_http_version | 1.1 | 启用 gzip 压缩的最低 http 协议版本 |
| gzip_buffers | 2 4k | 设置压缩需要的缓冲区大小,以 4k 为大小,若文件为7k则申请2*4k的缓冲区 |
| gzip_static | on | 静态压缩,也就是提前已经准备好了压缩文件在同目录下会有一个 .gz 文档压缩包,避免了动态压缩,可以提升性能 |
| gzip_disable | MSIE [1-6]. | 设置禁用浏览器进行 gzip 压缩 |
Brotli 压缩
Brotli 是一种通用的无损压缩算法。它结合使用 LZ77 算法的一个现代变体(Lempel-Ziv 编码)、霍夫曼编码和二阶上下文建模来压缩数据,提供了与当前最佳通用压缩方法相媲美的压缩比。
Brotli 提供比 gzip 更好的压缩率,压缩速率也与 deflate 相当。但 brotli 压缩速度比 gzip 慢,因此 gzip 可能更适合于压缩不可缓存的内容。
Brotli 与大多数现代浏览器兼容,但同时仍需考虑回落机制。
Brotli 算法只支持 https 协议。