
광택 구성에 이 코드가 있는데 그 기능이 무엇인지 잘 모르겠습니다! 이 구성은 내 클라이언트 요청을 캐시할지 여부를 결정합니다. 뭐가 문제야?
sub vcl_backend_response {
if (beresp.status != 200) {
return (pass);
}
set beresp.http.X-Backend = beresp.backend.name;
unset beresp.http.cookie;
unset beresp.http.Set-Cookie;
if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
set beresp.http.Cache-Control = "no-store";
}
set beresp.http.Cache-Control = "no-store";
if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
return (pass);
}
return (deliver);
}
답변1
이 VCL 코드 블록은 캐시를 우회할 시기에 대한 몇 가지 규칙을 지정하는 것으로 보입니다. 그러나 작성 방식은 별로 의미가 없습니다.
캐시 우회
return(pass)
컨텍스트에서 캐싱을 우회하는 적절한 방법이 아닙니다 vcl_backend_response
. 들어오는 요청이 캐시를 우회할 때 return(pass)
사용됩니다 .vcl_recv
캐시를 우회한다는 것은 vcl_backend_response
들어오는 개체를 캐시에 저장하지 못하게 한다는 의미입니다. 모범 사례에 따르면 set beresp.uncacheable = true
TTL을 할당한 다음 return(deliver)
. 이렇게 하면 다음 백엔드 응답이 필수 기준을 충족할 때까지 이 객체가 특정 시간 동안 캐시를 우회합니다.
내 활성화를 통해 beresp.uncacheable
개체가 대기 목록에 올라가고 요청 통합의 후보가 되도록 보장합니다.
쿠키 제거
적중률을 높이려면 쿠키를 제거하는 것이 좋습니다. 백엔드 컨텍스트에서 헤더를 제거합니다 Set-Cookie
. 이는 vcl_backend_response
through 에서 올바르게 수행되지만 unset beresp.http.Set-Cookie
이는 무조건 수행됩니다.
이는 어떤 Set-Cookie
작업도 수행되지 않아 일관되지 않은 동작이 발생할 수 있음을 의미합니다. 이러한 쿠키를 제거하기 위해 사전 조건이 필요한지 확실하지 않습니다.
을 통해 들어오는 쿠키를 제거할 수도 있습니다 unset req.http.Cookie
. 하지만 vcl_backend_response
그 실행 에도 비슷한 호출이 있는 것 같습니다 unset beresp.http.Cookie
.
이는 Cookie
응답 헤더가 수신될 것임을 나타냅니다. 그럴 것 같지 않습니다.
VCL 다시 작성
다음은 다른 컨텍스트 없이 이 VCL 코드를 다시 작성하는 방법입니다.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_recv {
unset req.http.Cookie;
}
sub vcl_backend_response {
if(beresp.status != 200) {
set beresp.ttl = 120s;
set beresp.uncacheable = true;
return(deliver);
}
set beresp.http.X-Backend = beresp.backend.name;
unset beresp.http.Set-Cookie;
set beresp.http.Cache-Control = "no-store";
if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
set beresp.ttl = 120s;
set beresp.uncacheable = true;
return(deliver);
}
return (deliver);
}
경고: 이 내용을 프로덕션 환경에 복사하여 붙여넣는 것은 권장하지 않습니다. 이 VCL을 작성할 때 일부 모서리가 잘린 느낌이 듭니다. 추가 컨텍스트가 없으므로 이 방법을 사용하는 것을 권장하고 싶지 않습니다.