Nginx的Gzip介绍之压缩和解压缩
本节介绍如何配置响应的压缩或解压缩以及如何发送压缩文件。
介绍
压缩响应通常会大大减少传输数据的大小。但是,由于压缩是在运行时发生的,因此还会增加大量的处理开销,这可能会对性能产生负面影响。NGINX在将响应发送给客户端之前执行压缩,但不会“双重压缩”已压缩的响应(例如,由代理服务器进行的响应)。
启用压缩
要启用压缩,请在gzip指令中包含on
参数。
gzip on;
默认情况下,NGINX仅压缩MIME类型的响应text/html
。要压缩其他MIME类型的响应,请包含gzip_types指令并列出其他类型。
gzip_types text/plain application/xml;
要指定要压缩的响应的最小长度,请使用gzip_min_length指令。默认值为20字节(此处调整为1000):
gzip_min_length 1000;
默认情况下,NGINX不压缩对代理请求的响应(来自代理服务器的请求)。请求来自代理服务器的事实取决于请求中标Via
头字段的存在。要配置这些响应的压缩,请使用gzip_proxied指令。该指令具有许多参数,用于指定NGINX应该压缩哪些代理请求。例如,合理的做法是仅压缩对不会缓存在代理服务器上的请求的响应。为此目的,该gzip_proxied
指令有参数请示NGINX检查Cache-Control
报头字段中的响应,并且如果该值是压缩的响应no-cache
,no-store
或private
。此外,您必须包含expired
参数以检查Expires
标头字段。在下面的示例中,将设置这些参数以及auth
用于检查Authorization
标头字段是否存在的参数(授权响应是特定于最终用户的,通常不会缓存):
gzip_proxied no-cache no-store private expired auth;
与大多数其他指令一样,配置压缩的指令可以包含在http
上下文中server
或location
配置块中。
gzip压缩的整体配置可能如下所示。
server {
gzip on;
gzip_types text/plain application/xml;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
...
}
启用减压
某些客户端不支持gzip
编码方法的响应。同时,可能希望存储压缩的数据,或者动态压缩响应并将其存储在缓存中。为了成功服务接受和不接受压缩数据的两个客户端,NGINX可以在将数据发送到后一种类型的客户端时动态地对数据进行解压缩。
要启用运行时解压缩,请使用gunzip指令。
location /storage/ {
gunzip on;
...
}
该gunzip
指令可以在相同的上下文中指定gzip
的指令:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
请注意,此指令是在单独的模块中定义的,默认情况下可能未包含在NGINX开源构建中。
发送压缩文件
要将文件的压缩版本(而不是常规文件)发送到客户端,请将gzip_static指令设置on
为适当的上下文。
location / {
gzip_static on;
}
在这种情况下,为了满足对/ path / to / file的请求,NGINX尝试查找并发送文件/path/to/file.gz。如果该文件不存在,或者客户端不支持gzip,则NGINX发送该文件的未压缩版本。
请注意,该gzip_static
指令不启用动态压缩。它仅使用任何压缩工具预先压缩的文件。要在运行时压缩内容(不仅是静态内容),请使用gzip
指令。
该指令在单独的模块中定义,默认情况下可能未包含在NGINX开源构建中。