在我的 Varnish 3 配置(default.vcl)中,我配置了以下内容以通过响应标头传递信息:
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache = "MISS";
}
set resp.http.X-Cache-Expires = resp.http.Expires;
set resp.http.X-Test = "LOL";
# remove Varnish/proxy header
remove resp.http.X-Varnish;
remove resp.http.Via;
remove resp.http.Age;
remove resp.http.X-Purge-URL;
remove resp.http.X-Purge-Host;
remove resp.http.X-Powered-By;
}
但我唯一能看到的是
HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 8492
Accept-Ranges: bytes
Date: Tue, 05 Feb 2013 10:11:02 GMT
Connection: keep-alive
它没有显示我们在vcl_deliver
方法内部添加的任何标题。
编辑:这是我的 vcl_fetch 方法:
sub vcl_fetch {
unset beresp.http.Server;
unset beresp.http.Etag;
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = req.http.rlnclientipaddr;
set beresp.http.X-Wut = "YAY";
if (req.url ~ "^/w00tw00t") {
error 750 "Moved Temporarily";
}
# allow static files to be cached for 7 days
# with a grace period of 1 day
if (req.url ~ "\.(png|gif|jpeg|jpg|ico|swf|css|js)$") {
set beresp.ttl = 7d;
set beresp.grace = 1d;
return(deliver);
}
# cache everythig else for 1 hours
set beresp.ttl = 1h;
# grace period of 1 day
set beresp.grace = 1d;
return(deliver);
}
有人知道如何解决这个问题,因为响应标头中不包含任何自定义标头...正如您在上面看到的,在我的vcl_fetch
方法中,我添加了几个自定义响应标头,但没有一个显示。
答案1
vcl_deliver
仅对缓存中找到的对象调用。您可能想使用vcl_fetch
。
如果这不是问题所在,则您没有显示正在发送的请求或您的vcl_recv
。pipe
例如,也许您正在 ing?尝试通过 telnet 或 netcat 发送原始请求,并向我们显示您发送和接收的内容。由于您正在使用vcl_deliver
,请执行两次相同的请求,以便我们能够正确调试。