특정 헤더를 기반으로 바니시 캐시를 우회하는 방법

특정 헤더를 기반으로 바니시 캐시를 우회하는 방법

이틀 전부터 이 작업을 해왔지만 운이 없었습니다.

그래서 기본적으로 특정 수신 요청 URL에 대해 바니시 캐시를 우회하고 싶습니다.

나는 이 규칙을 다음과 같이 정의했습니다.

sub vcl_recv {
     if (req.url ~ "/en/reading-books/") { return(pass); }
}

하지만 페이지를 새로 고치면 여전히 캐시되고 있으며 응답 헤더는 다음을 반환합니다.

via: 1.1 varnish-v4
x-varnish: 2

이 백그라운드 실행 명령은 다음과 같은 출력을 생성합니다.

varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'

내가 여기서 무엇을 놓치고 있는 걸까요? 어떤 조언이라도 정말 감사하겠습니다.

답변1

지원되는 버전으로 업그레이드

들어오는 URL의 캐싱 디버깅에 대해 이야기하기 전에 다음 사항을 지적하고 싶습니다.알려진 보안 취약점이 있는 Varnish의 단종 버전을 실행하고 있습니다..

최신 버전으로 업그레이드하거나 Varnish Cache 6.0 LTS를 사용하세요.

보다https://www.varnish-software.com/developers/tutorials/#installations다양한 Linux 배포판에 대한 설치 가이드 목록을 확인하세요.

정확한 URL 또는 URL 패턴 일치

공유한 VCL 코드는 /en/reading-books. 해당 URL 또는 일련의 URL과 일치하는 패턴에 대해 정확한 일치를 수행하려고 합니까?

정확한 일치를 위해 URL을 다음과 같이 조정합니다.

sub vcl_recv {
    if (req.url == "/en/reading-books/") { 
        return(pass); 
    }

}

모두 로 시작하는 여러 URL을 일치시키는 경우 /en/reading-books/VCL을 다음과 같이 조정합니다.

sub vcl_recv {
    if (req.url == "^/en/reading-books/.*$") { 
        return(pass); 
    }

}

Varnish 관련 응답 헤더는 어떻습니까?

귀하의 질문에서 다음 헤더를 언급하셨습니다.

via: 1.1 varnish-v4
x-varnish: 2

이는 Varnish를 사용하고 있음을 나타내며 반드시 Varnish가 캐시의 응답을 제공하는 것은 아닙니다.

헤더 via는 Varnish가 응답 체인의 프록시 서버라는 사실을 사용자에게 알립니다.

헤더 값은 x-varnish일반적으로 요청을 처리한 트랜잭션의 ID를 나타냅니다.

Age실제로 응답이 캐시에서 제공되는 기간을 나타내는 헤더 입니다 .

로그 확인

varnishncsa명령은 Varnish 공유 메모리 로그에 액세스할 수 있지만 실제로 유용한 캐싱 정보를 많이 표시하지는 않습니다.

의 목적은 varnishncsaApache 및 Nginx가 반환하는 것과 유사한 반환 액세스 로그 정보입니다.

캐싱을 디버깅하려면 다음 명령을 실행하십시오.

varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"

varnishncsaNCSA 형식의 한 줄 응답을 생성하는 동안 varnishlog전체 트랜잭션을 반환합니다. 질문 에 출력을 추가해 주시면 varnishlog디버깅하는 데 도움을 드리겠습니다.

관련 정보