Nginx配置gzip_http_version 1.1时HTTP/1.1请求响应未压缩问题咨询
你对该参数的基础定义理解没有错,但忽略了Nginx gzip模块的联动配置规则和隐含限制,出现该问题的常见原因如下:
- 请求经过代理转发
Nginx的gzip_proxied参数默认值为off,只要请求携带Via头(标识经过代理转发),哪怕请求本身是HTTP/1.1版本、携带Accept-Encoding: gzip头,只要gzip_http_version设为1.1,Nginx会直接跳过压缩逻辑。当gzip_http_version改为1.0时,代理校验逻辑会大幅放宽,因此可以正常触发压缩。
解决方法:在Nginx配置中新增gzip_proxied any;,也可以根据业务需要替换为expired no-cache no-store private auth等更细粒度的选项。 - 请求携带
Connection: close头
HTTP/1.1默认支持长连接,早期部分客户端对短连接的HTTP/1.1压缩响应处理存在兼容问题,因此Nginx默认不会对携带Connection: close头的HTTP/1.1请求返回压缩内容。而gzip_http_version设为1.0时,HTTP/1.0本身默认就是短连接,不会触发该限制。 - 请求协议被中间层伪装
部分反向代理、负载均衡、CDN回源时,会将客户端的HTTP/1.0请求升级为HTTP/1.1发往后端Nginx,但实际请求的协议逻辑还是按1.0处理,这时候gzip_http_version 1.1的校验无法通过,改为1.0即可匹配。
你可以通过修改Nginx日志格式,增加$server_protocol $http_via $http_connection三个字段的打印,就能快速定位具体触发限制的原因。
内容的提问来源于stack exchange,提问作者Dominik Serafin
相关产品推荐
相关产品推荐

