带有 VirtualHost 代理的 Apache 2.4 缓存
Posted
技术标签:
【中文标题】带有 VirtualHost 代理的 Apache 2.4 缓存【英文标题】:Apache 2.4 Cache with VirtualHost Proxy 【发布时间】:2018-09-08 16:27:45 【问题描述】:我想为 Tomcat 上的网站激活 Apache 2.4 上的缓存,该网站使用 VirtualHost 配置通过 Apache。
这是我的 apache2.config 文件代码:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
#Cache
CacheEnable disk /
CacheHeader on
CacheIgnoreNoLastMod On
CacheDefaultExpire 800
CacheMaxExpire 64000
ExpiresActive on
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8084/Application/
ProxyPassReverse / http://localhost:8084/Application/
</VirtualHost>
缓存在我的本地机器 (Ubuntu) 上有效,但在生产服务器 (Ubuntu Server) 上无效。
基本上我用
检查缓存目录ls -la /var/cache/apache2/mod_cache_disk/
在我的本地机器上,我得到了很多具有正确日期的缓存文件,但在我的服务器上,目录仍然是空的。
任何想法,谢谢
【问题讨论】:
【参考方案1】:我发现了问题。基本上我没有启用“cache_disk”。我不明白为什么 apache 在没有给我错误的情况下重新启动。这就是为什么我没有考虑。无论如何,解决方案是
sudo a2enmod cache_disk
【讨论】:
【参考方案2】:-
缓存模块是否启用?如果是这样,您将看到您正在使用的那些指令名称
httpd -L | grep -i cache
-
是否为您的缓存目录正确设置了权限?
ls -lZ yourdir # check selinux
getfacl yourdir # check for the account running the process
-
这些资源是否被授权缓存?运行
curl
命令并查找缓存标头(pragma
、cache-control
)
【讨论】:
1.我运行“apachectl -L | grep -i cache”并在本地和服务器上运行相同。 2. getfacl /var/cache/apache2/mod_cache_disk 也是一样的(owner: www-data group: www-data, user::rwx group::r-w other::r-w)。 3.我没有使用编译指示(我认为它已弃用),但我使用 Cache-Control 并且在本地和服务器上都得到响应头“Cache-Control: public, max-age=86400”。但在 /var/cache/apache2/mod_cache_disk 的服务器中仍然没有缓存文件。有没有可能它被缓存在另一个目录中而我不知道? 如果它是从缓存中提供的,您应该在响应中看到 ETag 和 Age 标头。这些标题是否存在? 感谢尤金,正如我所写,我已经找到了问题所在。我确实有一个“Age”标题,但没有“Etag”标题。以上是关于带有 VirtualHost 代理的 Apache 2.4 缓存的主要内容,如果未能解决你的问题,请参考以下文章
带有代理和排除的 html5 pushstate 的 Apache 重写规则
尝试使用代理在 Apache 上运行 Faye websocket
带有 WSGI 的 Django 在 Apache VirtualHost 后面给出 404