2013-01-07 2 views
1

아파치 2.4.2에 역방향 프록시 설정으로 앉아있는 웹 애플리케이션 서버가 있습니다. 아파치 - 앱 서버의 응답 캐싱

Pragma: no-cache 
Vary: Accept-Encoding 
Cache-Control: no-cache 
Expires: Mon, 07 Jan 2013 01:21:30 GMT 

나는이 응용 프로그램 서버 앞에 리버스 프록시로 일하고 아파치 2.4.2이 응용 프로그램 서버에서 응답을 캐시 할 : 응용 서버는 다음과 같은 헤더를 포함한 응답을 반환합니다. 응용 프로그램 서버를 수정할 수 없습니다. 아파치에서 어떻게합니까? CacheStoreExpired 및 CacheIgnoreCacheControl에 대한 희망은 있었지만 Apache가 백엔드에 대한 조건부 요청을하기 때문에 여기서는 도움이되지 않습니다. 앱 서버는 항상 '지금'만료되는 새로운 항목으로 캐시를 새로 고침하려고합니다. 응용 프로그램 서버에서 반환 된 헤더를 다시 작성할 수 있을지 궁금합니다. 도

CacheEnable disk/
CacheRoot "C:/Program Files/Apache Software Foundation/Apache2.4/cache/" 

CacheIgnoreCacheControl On 
CacheIgnoreNoLastMod On 
CacheStoreNoStore On 
CacheStoreExpired On 

CacheStaleOnError on 

LogLevel debug 
CacheHeader on 
CacheDetailHeader on 

CacheDefaultExpire 120 
CacheMaxExpire 120 

SetEnv proxy-nokeepalive 1 
ProxyPass/http://localhost:8080/ 

아파치의 디버그 로그가 조금 걱정입니다 :

[Fri Jan 04 16:27:52.113857 2013] [cache:debug] [pid 2824:tid 964] cache_storage.c(624): [client 192.168.4.36:51783] AH00698: cache: Key for entity /browse?(null) is http://192.168.4.189:80/browse?, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:52.113857 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(159): [client 192.168.4.36:51783] AH00750: Adding CACHE_SAVE filter for /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:52.113857 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(169): [client 192.168.4.36:51783] AH00751: Adding CACHE_REMOVE_URL filter for /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.503049 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(1190): [client 192.168.4.36:51783] AH00769: cache: Caching url: /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.503049 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(1196): [client 192.168.4.36:51783] AH00770: cache: Removing CACHE_REMOVE_URL filter., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.643529 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(1318): [client 192.168.4.36:51783] AH00737: commit_entity: Headers and body for URL http://192.168.4.189:80/browse? cached., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache:debug] [pid 2824:tid 964] cache_storage.c(624): [client 192.168.4.36:51783] AH00698: cache: Key for entity /browse?(null) is http://192.168.4.189:80/browse?, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(569): [client 192.168.4.36:51783] AH00709: Recalled cached URL info header http://192.168.4.189:80/browse?, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(865): [client 192.168.4.36:51783] AH00720: Recalled headers for URL http://192.168.4.189:80/browse?, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache:debug] [pid 2824:tid 964] cache_storage.c(320): [client 192.168.4.36:51783] AH00695: Cached response for /browse isn't fresh. Adding/replacing conditional request headers., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(159): [client 192.168.4.36:51783] AH00750: Adding CACHE_SAVE filter for /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:53.799618 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(169): [client 192.168.4.36:51783] AH00751: Adding CACHE_REMOVE_URL filter for /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.235637 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(1190): [client 192.168.4.36:51783] AH00769: cache: Caching url: /browse, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.235637 2013] [cache:debug] [pid 2824:tid 964] mod_cache.c(1196): [client 192.168.4.36:51783] AH00770: cache: Removing CACHE_REMOVE_URL filter., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.298072 2013] [cache_disk:warn] [pid 2824:tid 964] (OS 5)Access is denied. : [client 192.168.4.36:51783] AH00699: rename tempfile to file failed: C:/Program Files/Apache Software Foundation/Apache2.4/cache/aptmpcJvfPV -> C:/Program Files/Apache Software Foundation/Apache2.4/cache/A/3/xM0hz_t8XPQaojszgaGA.data, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.298072 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(617): [client 192.168.4.36:51783] AH00711: Deleting C:/Program Files/Apache Software Foundation/Apache2.4/cache/A/3/xM0hz_t8XPQaojszgaGA.header from cache., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.298072 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(634): [client 192.168.4.36:51783] AH00713: Deleting C:/Program Files/Apache Software Foundation/Apache2.4/cache/A/3/xM0hz_t8XPQaojszgaGA.data from cache., referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.298072 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(674): [client 192.168.4.36:51783] AH00715: Deleting directory C:/Program Files/Apache Software Foundation/Apache2.4/cache/A/3 from cache, referer: http://192.168.4.189/browse 
[Fri Jan 04 16:27:55.298072 2013] [cache_disk:debug] [pid 2824:tid 964] mod_cache_disk.c(1313): [client 192.168.4.36:51783] AH00736: commit_entity: URL 'http://192.168.4.189:80/browse?' not cached due to earlier disk error., referer: http://192.168.4.189/browse 
+0

안녕하세요, 귀하의 구성에서 무엇이 잘못되었는지 알아 냈습니까? '이전 디스크 오류 때문에 캐시되지 않았습니다.'라는 오류를 수정 했습니까? – freedev

+0

나는 포기했다! 파일 이름 바꾸기 임시 파일 이름 바꾸기 경고가 Windows (http://goo.gl/HPSb4)의 Apache 버그입니다. Mod_headers는 원래 서버 (헤더 unset Expires)의 안티 캐시 응답을 제거하여 아파치가 캐싱을 시작했지만 mod_expires가 계산 만료를 설정할 수 없으며 캐시에서 제공된 응답에 no-cache 헤더를 다시 삽입 할 수도 없습니다. 웹의 캐싱을 방지하기 위해). 그런 다음 아파치는 브라우저의 요청에 max-age = 0 (나에게 겁을 먹었 음)이 포함되어있을 때 캐시에서 무엇인가를 제공했다. 궁극적으로 나는 HTTP가 아닌 응용 프로그램 계층에서 캐싱이 필요하다는 것을 깨달았습니다. – dave

답변

0

당신은 mod_cache가

하여이 작업을 수행 할 수 있습니다 나는이 설정으로 (아무 소용)하면 mod_cache를 사용하고

http://httpd.apache.org/docs/current/mod/mod_cache.html

다음을 추가하십시오 :

CacheIgnoreQueryString On 

쿼리 문자열 매개 변수가있는 요청은 기본적으로 캐시되지 않습니다.

로그를 보면 마지막 줄에 오류가 있습니다 : not cached due to earlier disk error.
아파치 서버가 캐시 디렉토리에 쓸 수있는 올바른 권한이 없거나 디스크가 꽉 찼을 수 있습니다 ...
apache memcache 디렉토리가 올바르게 작성되었는지 다시 확인해야합니다.

+0

입력 해 주셔서 감사합니다. mod_cache를 사용하고 있는데 어떤 구성을 제안합니까? (원래의 게시물을 편집하여 현재 구성을 보여줍니다.) – dave

+0

구성이 정확합니다. 무엇이 잘못되었는지를 이해하기 위해 아파치의 응답에 의해 반환 된 HTTP 헤더가 필요합니다. – freedev

+0

실제로 아파치가 리턴 한 헤더입니다. 아마 더 흥미롭게도 Apache의 디버그 로그에서 요청을 보여주는 발췌 부분을 추가 할 것입니다 (fetch, cache, invalidate, refetch, serve는 단일 브라우저의 요청으로 인한 것입니다). – dave