Varnish 不显示自定义标题

Varnish 不显示自定义标题

在我的 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_recvpipe例如,也许您正在 ing?尝试通过 telnet 或 netcat 发送原始请求,并向我们显示您发送和接收的内容。由于您正在使用vcl_deliver,请执行两次相同的请求,以便我们能够正确调试。

相关内容