我正在尝试将 Apache 设置为带缓存的正向代理,但它似乎无法正常工作。让 Apache 充当正向代理没有问题,但无论我做什么,它都不会缓存任何东西,无论是磁盘还是内存。我已经检查过,以确保 mods_enabled 目录中没有任何内容与 mod_cache 冲突(最终将其全部注释掉),并且我还尝试将所有缓存相关字段移动到 mod_cache 的配置文件中。此外,我设置了缓存请求的日志记录,但这些日志中没有任何内容。以下是我的 Apache 配置,任何帮助都将不胜感激!!
<VIRTUALHOST *:8080>
ProxyRequests On
ProxyVia On
#ErrorLog "/var/log/apache2/proxy-error.log"
#CustomLog "/var/log/apache2/proxy-access.log" common
CustomLog "/var/log/apache2/cached-requests.log" common env=cache-hit
CustomLog "/var/log/apache2/uncached-requests.log" common env=cache-miss
CustomLog "/var/log/apache2/revalidated-requests.log" common env=cache-revalidate
CustomLog "/var/log/apache2/invalidated-requests.log" common env=cache-invalidate
LogFormat "%{cache-status}e ..."
# This path must be the same as the one in /etc/default/apache2
CacheRoot /var/cache/apache2/mod_disk_cache
# This will also cache local documents. It usually makes more sense to
# put this into the configuration for just one virtual host.
CacheEnable disk /
#CacheHeader on
CacheDirLevels 3
CacheDirLength 5
##<IfModule mod_mem_cache.c>
# CacheEnable mem /
# MCacheSize 4096
# MCacheMaxObjectCount 100
# MCacheMinObjectSize 1
# MCacheMaxObjectSize 2048
#</IfModule>
<Proxy *>
Order deny,allow
Deny from all
Allow from x.x.x.x
#IP above hidden for this post
<filesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "proxy-revalidate"
</filesMatch>
</Proxy>
</VIRTUALHOST>
答案1
这是一个旧帖子,但我发现它希望能找到自己的答案,所以我会分享我所能分享的内容,也许它会很有用。
鉴于你所说的,我会:
- 确保 apache 对 /var/cache/apache2/mod_disk_cache 具有写权限
通过强制缓存所有内容并检查缓存目录是否为空来确认它是否可以缓存某些内容(完整示例):
CacheIgnoreNoLastMod 开启
CacheDefaultExpire 7200
如果上述方法无效,那么我相信问题不在于 mod_cache 或 mod_disk_cache。如果是,请在此处停止,否则继续:
- 确保对 xml|txt|html|js|css 的请求是 GET 请求(怀疑它们是其他请求)。
- 确保没有“授权”标头。
确保尚未存在 Cache-Control private 或 no-store 标头。如果有,请在“Header append”之前添加以下内容:
标头未设置 Cache-Control
确保存在“Etag”、“Last-Modified”或“Expires”标头。(也许您可以从代理的公共端发出请求来检查 mod_expire 是否确实设置了过期标头?)
- 阅读“什么可以缓存?“Apache 缓存文档概述”部分。
顺便说一句,我的磁盘缓存正在工作,但我还没能弄清楚如何让 %{cache-status} 显示在日志中。