Apache mod_cache 和 mod_deflate?

Apache mod_cache 和 mod_deflate?

我们有一个 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>

相关内容