本节介绍如何配置响应压缩或解压缩,以及如何发送预先压缩的文件。
简介(
Introduction
)
压缩响应通常能显著减少传输数据量,但运行时压缩也会增加处理开销,可能影响性能。NGINX 在发送响应给客户端之前压缩数据,不会对已经压缩的响应再次压缩,例如来自代理后端的已压缩响应。
启用压缩(
Enabling Compression
)
加入 gzip 指令并设置为 on,即可启用压缩。(gzip)
gzip on;
默认情况下,NGINX 只压缩 MIME 类型为 text/html 的响应。要压缩其他类型,使用 gzip_types 列出额外类型。(gzip_types)
gzip_types text/plain application/xml;
使用 gzip_min_length 设置需要压缩的响应最小长度。默认20字节,下例改为1000:(gzip_min_length)
gzip_min_length 1000;
默认情况下,NGINX 不压缩代理请求的响应,也就是来自代理服务器的请求。是否经过代理由请求中的 Via 头判断。使用 gzip_proxied 配置这类响应压缩。它接受多个参数,指定压缩哪些代理请求。例如,只压缩代理不会缓存的响应是合理做法:相关参数要求检查响应 Cache-Control,在值为 no-cache、no-store 或 private 时压缩。还需加入 expired,检查 Expires 的值。下例同时加入 auth,检查请求是否有 Authorization 头;授权响应针对具体用户,通常不会缓存。(gzip_proxied)
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;
...
}
启用解压缩(
Enabling Decompression
)
部分客户端不支持 gzip 编码响应,但服务器可能希望存储压缩数据,或即时压缩后放入缓存。为同时服务接受和不接受压缩数据的客户端,NGINX 可以在向后者发送响应时即时解压。
用 gunzip 指令启用运行时解压。(gunzip)
location /storage/ {
gunzip on;
...
}
gunzip 可以放在与 gzip 相同的配置上下文中:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
注意,这条指令属于独立模块,默认 NGINX Open Source 构建可能没有包含它。(module)
发送预先压缩的文件(
Sending Compressed Files
)
如果希望发送文件的压缩版本而非普通版本,在相应上下文把 gzip_static 设置为 on。(gzip_static)
location / {
gzip_static on;
}
处理 /path/to/file 请求时,NGINX 会尝试查找并发送 /path/to/file.gz。如果压缩文件不存在,或客户端不支持 gzip,就发送未压缩版本。
gzip_static 不启用即时压缩。它只使用事先由压缩工具生成的文件。若要在运行时压缩内容,而不仅是静态文件,使用 gzip。
这条指令也属于独立模块,默认 NGINX Open Source 构建可能没有包含它。(module)
来源:NGINX 响应压缩与解压缩。F5 / NGINX 文档贡献者。保留独立模块与构建条件。 本文依据本批次转载授权译为中文,原始代码与示例输出保留。











暂无评论内容