问题描述
源站支持Gzip压缩,且用户请求头中含有Accept-Encoding: gzip, deflate,若请求未经过CDN直接回源,则源站会返回响应头Content-Encoding: gzip,并响应压缩文件;但经过CDN加速回源后,用户收到的是非压缩响应文件。本文介绍可能的原因及解决方案。
可能原因
域名经过CDN加速后,CDN节点默认会在请求头中增加Via头部,其值为从边缘节点到中间节点的服务器名称,该请求头一般会透传至客户源站。如果源站为Nginx服务器,默认会针对Via代理请求头,不响应Gzip压缩文件。导致用户请求经过CDN回源后,获取到的文件为非压缩文件。
解决方案
有如下两种方式可以解决:
方案一:在Nginx源站Gzip配置中补充配置gzip_proxied any,即可使源站针对Via请求头也响应Gzip压缩文件。
方案二:在CDN节点配置文件压缩功能,将从源站拉取到的非压缩文件,转换为压缩文件后响应给用户。
建议优先采用方案一,以避免源站流出流量大于CDN节点响应给用户的流量。