WEB服务与NGINX(14)-NGINX的压缩功能
1. nginx压缩功能
nginx支持对指定类型的文件进行压缩后再回传给客户端,而且压缩可以设置压缩比,压缩后的文件会明显变小,有助于降低出口带宽的利用率,但是会占用一定的CPU资源。
nginx实现压缩功能是由ngx_http_gzip_module模块提供的。
-
gzip on | off;
支持环境:http,server,location,if in location
启用或禁用gzip压缩功能。
-
gzip_comp_level level;
支持环境:http,server,location
指定压缩比,压缩比由低到高:1 到 9,默认为1
-
gzip_disable regex …;
支持环境:http,server,location
如果请求的User-Agent头信息能被指定的正则表达式匹配,则对响应报文禁用gzip压缩功能。主要是为了兼容不支持gzip压缩的浏览器,比如IE6,不过IE6早就废弃了。
禁用IE6的压缩功能:gzip_disable “MSIE [1-6].”;
-
gzip_min_length length;
支持环境:http,server,location
响应报文想要激活压缩功能的下限大小,报文太小的没有压缩意义,压缩后反而变大,默认为20个字节。
-
gzip_http_version 1.0 | 1.1;
支持环境:http,server,location
设置压缩响应所需的请求的最低HTTP协议版本,默认为1.1
-
gzip_buffers number size;
支持环境:http,server,location
设置支持压缩功能时缓冲区数量及每个缓存区的大小,默认大小为一个内存页(64位为8k)。
-
gzip_types mime-type …;
支持环境:http,server,location
指明仅对哪些类型的资源执行压缩操作,多个用空格分隔。通配符[ * ]可以匹配任意类型。不管是否指定”text/html”类型,该类型的响应总是启用压缩。
示例:gzip_types text/plain application/xml;
-
gzip_vary on | off;
支持环境:http,server,location
如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
-
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
支持环境:http,server,location
nginx充当代理服务器时,对于后端服务器的响应报文,在何种条件下启用压缩功能
参数说明
off:禁用所有代理请求的压缩,忽略其他参数;
expired:如果响应头“Cache-Control”字段包含" expired",则启用压缩;
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:为所有代理请求启用压缩
压缩功能使用示例如下:
#1.nginx的配置文件如下:
[root@nginx01 ~]# cat /etc/nginx/conf.d/virtualhost.conf
server {
listen 80;
server_name www.nginx01.com;
keepalive_requests 3;
keepalive_timeout 60 60;
charset utf-8,gbk;
gzip on;
gzip_comp_level 6;
gzip_min_length 64k;
gzip_types text/plain appliaction/javascript application/x-javascript text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
location / {
root /data/nginx/html/web1;
index index.html;
}
}
#2.复制日志文件,并修改文件的属主,否则nginx用户无权访问该文件
[root@nginx01 ~]# cp /var/log/messages-20210606 /data/nginx/html/web1/message.html
[root@nginx01 ~]# ll /data/nginx/html/web1/message.html
-rw------- 1 root root 1939879 Jun 17 22:32 /data/nginx/html/web1/message.html
[root@nginx01 ~]# chown nginx.nginx /data/nginx/html/web1/message.html
[root@nginx01 ~]# ll /data/nginx/html/web1/index.html
-rw-r--r-- 1 nginx nginx 16 Jun 16 21:56 /data/nginx/html/web1/index.html
#3.重启nginx服务
[root@nginx01 web1]# systemctl reload nginx.service
#4.客户端测试压缩功能,curl要使用--compress参数才会支持压缩
#index.html文件小于64k,未进行压缩
[root@xuzhichao ~]# curl --head --compress http://www.nginx01.com
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 17 Jun 2021 14:42:56 GMT
Content-Type: text/html; charset=utf-8,gbk
Content-Length: 16
Last-Modified: Wed, 16 Jun 2021 13:56:31 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "60ca030f-10"
Accept-Ranges: bytes
#message.html文件启用的压缩
[root@xuzhichao ~]# curl --head --compress http://www.nginx01.com/message.html
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 17 Jun 2021 14:43:05 GMT
Content-Type: text/html; charset=utf-8,gbk
Last-Modified: Thu, 17 Jun 2021 14:32:15 GMT
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
ETag: W/"60cb5cef-1d99a7"
Content-Encoding: gzip <==启用压缩