我使用apache2作为loadbalancer
和frontend-proxy
在tomcat服务器前,通过mod_ajp
连接。现在,我想添加缓存。mod_cache返回“broken expires header”
不幸的是,Tomcat服务器的应用程序发回了很多标题,根据RFC其防止缓存像pragma: no-cache
等,但主要的问题是一条错误消息:
HTTP/1.1 200 OK
Date: Thu, 18 Aug 2016 09:44:33 GMT
Server: Apache/2.4.10 (Debian)
X-Magnolia-Registration: Registered
Set-Cookie: JSESSIONID=xxxxxxx; Path=/form-cms/; Secure; HttpOnly
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-Encoding: gzip
Vary: Accept-Encoding
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Last-Modified: Thu, 18 Aug 2016 09:44:33 GMT
Content-Language: en
X-Cache: MISS from fqdn.example.com
X-Cache-Detail: "Broken expires header: Thu, 01 Jan 1970 00:00:00 GMT" from fqdn.example.com
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8
缓存配置外观像这样:
CacheRoot "/var/cache/apache2/mod_cache_disk"
CacheDirLevels 2
CacheDirLength 1
CacheMaxExpire 60
CacheDefaultExpire 60
CacheHeader on
CacheDetailHeader on
CacheIgnoreHeaders Expires
CacheIgnoreCacheControl on
CacheStoreNoStore On
CacheStorePrivat On
CacheQuickHandler off
<LocationMatch "^/my-app/.*">
CacheEnable disk
</LocationMatch>
我不知道如何解决这个问题,并且不能改变应用程序在tomcat服务器上的行为。我试图通过mod_headers取消过期头文件,但无济于事。
任何想法?
从标签我假设你使用木兰CMS。在这种情况下,问题可能(我不是100%肯定)在Magnolia和Apache的缓存头之间有冲突 - Magnolia实现了高级缓存算法(参见[documentation](https://documentation.magnolia-cms.com/display/) DOCS/Cache + core)),所以恕我直言,不需要在它前面放置另一个缓存。相反,在额外的缓存**和** Magnolia中,这可能会导致非常意外的行为。 –
@JozefChocholacek不幸的是,我们的Magnolia 5.4不能正确缓存html模板。我们正在检查木兰支持,如果这甚至可能 - 因此apache负载平衡器中的apache缓存。我几天前能够用nginx解决这个问题,但由于客户端拥有apache上的所有东西,除了用apache解决它之外,我别无选择 - 我所做的就是接受答案。 – Lars