2011-02-23 4 views
2

나는 처음으로 Varnish Cache와 협력하여 을 사용하고 있으며 기꺼이 작동하도록 기쁘게 생각하지 않습니다.session_start()를 사용할 때 Varnish Cache가 캐싱하지 않음

내 문제는 충분히 간단 해 보입니다.

전체 나는 .php 페이지를 캐시하기를 원합니다.

지금까지 모든 .php 요청에는 항상 광택이 적용된 캐시가 있고 내 apache 웹 서버에 도달합니다.

쿠키와 session_start() 호출 문제가 있습니다.

없음으로 session_start() =으로 session_start와 캐싱 () = 캐싱

이제 문서 을 이해할 수있을만큼 간단하지만 내가 시도하고 실패 시도했습니다.하지 곧 으로 session_start() = 더 이상의 캐싱을 호출하지 않습니다.

다음
<?php 
session_start(); 
?> 

<html> 
<head> 
</head> 
<body> 

<?php echo date('Y-m-d H-i-s'); ?> 

</body> 
</html> 

이 내 매우 깨끗하고 간단한 광택 default.vcl이 클라이언트와 서버 하고 여기에서 쿠키 설정을 해제해야

backend default { 
    .host = "127.0.0.1"; 
    .port = "8080"; 
} 

sub vcl_recv { 
    unset req.http.Cookie; 
    return (lookup); 
} 

sub vcl_fetch { 
    if (beresp.http.Set-Cookie) { 
     unset beresp.http.Set-Cookie; 
     return (deliver); 
    } 
} 

: 여기

은/PHP w 샘플 HTML입니다 그렇게하는 것처럼 보입니다.

응답 헤더 :

파이어 폭스에서 방화 광 으로 디버깅 할 때 나는 여기

는 파이어 폭스에서 HTTP 헤더있는이 default.vcl를 사용할 때 설정-쿠키와 쿠키 HTTP 헤더 가 없습니다 볼 수 있습니다

HTTP/1.1 200 OK 
Server: Apache/2.2.16 (Debian) 
X-Powered-By: PHP/5.3.3-7 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Type: text/html 
Content-Length: 192 
Date: Wed, 23 Feb 2011 01:34:17 GMT 
X-Varnish: 2052563421 
Age: 0 
Via: 1.1 varnish 
Connection: keep-alive 

Request Headers: 

GET /test.php HTTP/1.1 
Host: xshare.com.local 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Cache-Control: max-age=0 

어디서 잘못 될지 알 수 없습니다. .vcl 구성 파일에 줄과 변형을 추가/변경하고 제거하여 2 시간 동안 조정했습니다.

누구든지 조언을 해줄 수 있습니까?

많은 감사.

답변

1

이제는 의 .php 페이지에 session_start()를 캐싱하는 규칙의 조합을 발견했습니다.

내가 남긴 내용이지만 그 중 일부는 주석 처리했습니다. 나는 그 길을 따라 노력했습니다.

재판 및 오류시 이제는 2 개의 설정 규칙 만 적용됩니다.

하나는 클라이언트 용이고 다른 하나는 서버용입니다.

Client = unset req.http.Cookie; 

Server = set beresp.ttl = 5d; 

backend default { 
    .host = "127.0.0.1"; 
    .port = "8080"; 
} 

sub vcl_recv { 
    unset req.http.Cookie; 
# unset req.http.Cache-Control; 
    return (lookup); 
} 

sub vcl_fetch { 
    if (beresp.http.Set-Cookie) { 
     set beresp.ttl = 5d; 
#   unset beresp.http.Set-Cookie; 
#   unset beresp.http.Expires; 
#   unset beresp.http.Cache-Control; 
     return (deliver); 
    } 
} 

건배.

+0

beresp에서 설정 쿠키를 제거하지 않으면 모든 사용자에 대해 동일한 쿠키가 캐시됩니다! – matheuzzy

+0

세션의 전체 지점은 사용자에게 고유 한 것입니다. 이것이 바니시가 기본적으로 캐시하지 않는 이유입니다. – matpol

2

아마도 지금까지 살펴본 것처럼 캐싱과 쿠키가 일치하지 않습니다. 위의 예에서 세션 쿠키 (및 다른 모든 쿠키)를 제거하고 있으므로 이와 같은 방법으로 Varnish를 사용할 때 세션을 사용할 수 없습니다. 를 - 쿠키를 허용하지만 사용자 로그인 한 캐싱을 얻을 - 당신이 정말로

세 번 째로하지 않는 한 세션 (또는 쿠키)를 사용하지 않는 더 복잡한 솔루션입니다 :

2 일 당신이 할 수있는 대부분의 페이지에서 쿠키를 제거하지만 ESI 블록으로 처리하는 일부 페이지에서는 허용합니다. 그것에 관한 많은 문서가 존재합니다.

관련 문제