我有一个第三方托管的博客,我使用 varnish 来缓存。我的网站的其余部分由 apache 直接托管和服务,所以我有代理密码……由于 httpd 代理密码指向 localhost:varnishport,浏览器显示 localhost/blog:
ProxyPass /blog http://localhost:6081/blog
ProxyPassReverse /blog http://localhost:6081/blog
我尝试在 sub_vcl 中使用以下行来尝试重写 req.http.Host:
set req.http.Host = regsub(req.http.Host, "localhost", "example\.com");
但是我收到来自 apache 的 502 代理错误(见下文)。我是否应该在 VCL 的另一个部分中设置传回 apache 的标头逻辑?
“代理服务器从上游服务器收到无效响应。代理服务器无法处理请求 GET /blog。
原因:www.localhost 的 DNS 查找失败”
答案1
将 Varnish 放在 Apache 前面,并使用 host+url 条件有选择地缓存您的博客:
sub vcl_recv {
...
...
# detect blog
if (req.http.Host == "example.com" && req.url ~ "^/blog") {
#
#put your cache rules here
#
}
else {
# other parts should be untouched (on your wish)
return(pipe);
}
...
...
}