我们有一个 Apache 2.2,其中包含 mod_cache 和 mod_deflate 等模块。问题是,如果我们像 Apache 文档中那样附加 Vary 标头...
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
...我们最终会在缓存中保存针对每个用户代理变体的服务资源副本。这会浪费磁盘空间并降低命中率。
那么,这个问题的首选解决方案是什么?抛弃 Vary 标头并仅压缩纯 HTML 等“安全”资源?
答案1
将标头设置为随用户代理而变化的原因是,Apache 推荐的 mod_deflate 配置为 Netscape 4 用户提供某些内容的未压缩版本。现在 Netscape 4 用户可能很少,因此您可以只向所有声称支持压缩内容的浏览器提供压缩内容,而不随用户代理而变化。
因此,建议的配置如下:
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
你可以拥有:
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
</Location>