나는 이것을 수행하는 방법에 대해 VCL을 이해하려고 미친 듯이 노력했으며 불가능하다고 생각하기 시작했습니다. 여러 다른 호스트에 서비스를 제공하는 여러 개의 백엔드 응용 프로그램 서버가 있습니다. 모든 호스트의 페이지를 캐시하고 요청에서 원래 호스트 정보 ("www.site.com")가있는 앱 서버에 캐시가 누락 된 요청을 보내려면 바니시가 필요합니다. 그러나 모든 VCL 예제에서는 백엔드 서버 (예 : "backend1")에 특정 호스트 이름을 사용해야합니다. 이 주위에 어떤 방법이 있습니까? 캐시 미스가 IP를 가리키고 요청 호스트를 그대로 유지하는 것이 좋습니다.백엔드 가상 호스트가있는 가상의 라운드 로빈 디렉터
는 여기에 내가 지금 가지고있는 무엇 : 등
backend app1 {
.host = "192.168.1.11";
.probe = {
.url = "/heartbeat";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
backend app2 {
.host = "192.168.1.12";
.probe = {
.url = "/heartbeat";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
director pwms_t247 round-robin {
{
.backend = app1;
}
{
.backend = app2;
}
}
sub vcl_recv {
# pass on any requests that varnish should not handle
if (req.request != "HEAD" && req.request != "GET" && req.request != "BAN") {
return (pass);
}
# pass requests to the backend if they have a no-cache header or cookie
if (req.http.x-varnish-no-cache == "true" || (req.http.cookie && req.http.cookie ~ "x-varnish-no-cache=true")) {
return (pass);
}
# Lookup requests that we know should be cached
if (req.url ~ ".*") {
# Clear cookie and authorization headers, set grace time, lookup in the cache
unset req.http.Cookie;
unset req.http.Authorization;
return(lookup);
}
}
...
이 나는 중요한 일을 언급 무시하면 내 첫 번째 StackOverflow의 질문이 너무 알려 주시기 바랍니다입니다! 감사.
기술적으로 정답입니다. 아이비입니다. 그러나 문제는 결국 내 프로브 요청에 호스트 정보가 없었기 때문에 nginx는 올바른 가상 호스트에 하트 비트 GET 요청을 보내는 방법을 알지 못했습니다. 필자는 프로브 요청을 수동으로 수행하여이 문제를 해결했습니다. – jeremy6d