2016-08-18 32 views
0

我使用apache2作为loadbalancerfrontend-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取消过期头文件,但无济于事。

任何想法?

+0

从标签我假设你使用木兰CMS。在这种情况下,问题可能(我不是100%肯定)在Magnolia和Apache的缓存头之间有冲突 - Magnolia实现了高级缓存算法(参见[documentation](https://documentation.magnolia-cms.com/display/) DOCS/Cache + core)),所以恕我直言,不需要在它前面放置另一个缓存。相反,在额外的缓存**和** Magnolia中,这可能会导致非常意外的行为。 –

+0

@JozefChocholacek不幸的是,我们的Magnolia 5.4不能正确缓存html模板。我们正在检查木兰支持,如果这甚至可能 - 因此apache负载平衡器中的apache缓存。我几天前能够用nginx解决这个问题,但由于客户端拥有apache上的所有东西,除了用apache解决它之外,我别无选择 - 我所做的就是接受答案。 – Lars

回答

0

当Magnolia正在返回一个资源并想通知浏览器,它不应该被缓存时,它会设置几个标头:pragma: no-cache,cache-control: no-storeExpires: Thu, 01 Jan 1970 00:00:00 GMT标头。

由于第一个UNIX时间戳是01/01/1970 12:00:00 am,所以mod_cache apache模块确实给出了broken expires header消息。

解决方法是更改​​Magnolia的BrowserPolicy设置以包含FixedDuration过期标题,但不能高速缓存其他任何内容。