带有 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 命令并查找缓存标头(pragmacache-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

带有 mod-proxy 和 SSL 的 Apache VirtualHost

从端口80到端口8000的Apache反向代理配置

如何在 AWS ElasticBeanstalk 中修改 apache VirtualHost