Nginx 配置 Gzip

2023-02-19 02:39:03 阅读:1227 评论:0 点赞:0
所属分类: Nginx

一、原理

Gzip 的作用就是压缩网络传输中的数据包,其原理如下图所示:
179fff5c-1440-4bb9-8707-d965ce862768

1.1 浏览器通过设置请求头,告诉服务端支持 gzip。

b2eec611-f2e4-4b87-9170-9bdc77be5efb

1.2 服务根据请求头,压缩传输的数据包(可以设置压缩等级)。

1.3 客户端收到数据,根据响应头来解压数据包。

a0a5c12d-21d5-426c-88d8-3bf9953f49c4

1.3.1 查看浏览器支持压缩格式

31c5d60b-f308-4c74-a308-2642169df17f

二、配置

2.1 动态压缩

在Nginx的配置文件中可以通过配置 gzip 来压缩网络传输中的数据包,相关的指令可以配置在 http 块、server 块和 location 块中,Nginx可以通过:
ngx_http_gzip_module 模块
ngx_http_gzip_static_module 模块
ngx_http_gunzip_module 模块
对这些指令进行解析和处理。

所有资源满足条件的资源传递都回被压缩,会导致 sendfile 失效。

提示

可以使用 ngx_http_gzip_static_module 模块的 gzip_static 指令来解决 Gzip 和 sendfile 共存问题。

gzip on;

// 根据操作系统配置
// 32位:32 4k
// 64位:16 8k
gzip buffers 16 8k;

// 压缩等级:1~9,压缩率
gzip_comp_level 6;

// http 版本
gzip_http_version 1.1;

// 低于这个值不会压缩
gzip_min_length 256;

// 反向代理时的压缩限制
// off:不做限制, any:无条件压缩,其他根据上游服务器header配置 
gzip_proxied any;

// 浏览器响应头显示 Vary
gzip_vary on;

// 那些MIME文件需要压缩
gzip_types text/plain applicaton/x-javascript text/css application/xml;

// 那些浏览器禁用压缩
gzip_disable <正则>

2.2 静态压缩

1、通常应用于CDN服务器,不需要原文件,只需要压缩文件时开启;
2、经常被访问的js、css或者其他静态页面
将某些资源预先压缩,这样就可以使用 sendfile 这个功能。
官方配置文档:http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html
我们需要重新编译 nginx 加入 --with-http_gzip_static_module 模块

./configure --prefix=/usr/local/nginx --with-http_gzip_static_module

# 编译
make
# 这里不要 make install 不然配置文件会被重置掉

systemctl stop nginx
cp /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx.old
cp ./objs/nginx /usr/local/nginx/sbin
cp ./objs/nginx /usr/bin/
nginx -V

a57e0f71-5a45-482e-b303-30a82fc8ca98

配置语法:

Syntax:	gzip_static on | off | always;
Default:	
gzip_static off;
Context:	http, server, location

on
开启压缩,会检查浏览器是否支持这个 gzip 格式压缩。

off
表示关闭该模块

always
不管浏览器支不支持,都会把这个压缩发送。通常是配合 ngx_http_gunzip_module 使用。如果浏览器不支持,就会把这个压缩包解压了再发送给浏览器。

注意

ngx_http_gzip_static_module 模块解决了 gzip 压缩 和 sendfile 文件共存的问题,若目录下面没有 *.gz 压缩文件,就会 404。所以我们需要预生成静态文件。
配置如下:

gzip file_name

要避免 404 问题,我们可以使用 ngx_http_gunzip_module,它会判断浏览器是否支持 gzip 支持就压缩返回数据包,不支持就返回原始数据包。

gunzip on;
gzip_static always; 
标签: nginx gzip

不拘一格

职业:后端开发工程师
学校:重庆师范大学
城市:重庆
文章:165
一个喜欢学习的人,快来和我成为朋友吧....

登录逐梦笔记

注册逐梦笔记

已有账号?