多层nginx转发gzip配置

3 阅读1分钟

写这篇文章的初衷在于生产环境访问页面时间过长,nginx通过gzip配置网站服务器进行输出压缩,可以减少http响应传输的数据量,从而提高网站页面的加载速度。然而在多个服务器之间的nginx转发下,转发服务器与实际压缩服务器的nginx配置并不相同,分享一下我的配置

转发服务器

# 设置代理请求的Host头为客户端原始Host,确保后端服务正确识别
proxy_set_header Host $host;
# 将客户端的Accept-Encoding头透传给后端,保持编码协商一致性
proxy_set_header Accept-Encoding $http_accept_encoding;
# 记录客户端真实IP到X-Real-IP头(适用于单层代理场景)
proxy_set_header X-Real-IP $remote_addr;
# 追加客户端IP到X-Forwarded-For链(适用于多层代理场景)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 启用原始请求头传递到后端服务(默认开启,显式声明确保行为)
proxy_pass_request_headers on;
# 强制使用HTTP/1.1协议与后端通信,支持长连接等特性
proxy_http_version 1.1;
# 清除Connection头,禁用代理连接复用,避免兼容性问题
proxy_set_header Connection "";
#关闭gzip避免重复压缩
gzip off;

实际压缩服务器

#关闭gzip
gzip off;
#添加响应头,帮助代理/CDN区分压缩与未压缩内容
gzip_vary on;
#启用静态预压缩功能,Nginx会优先发送已存在的 .gz 文件
gzip_static on;

以上配置中,使用了静态预压缩进一步优化加载时间,但这有几点需要注意:

1、对应的文件需要提前压缩好对应的.gz文件

2、对应的.gz文件修改时间必须晚于源文件

3、对于视频、图片等二进制文件因已经本身已压缩本身已压缩,不能再次进行gzip压缩