1

我们曾经使用非常早期版本的 Varnish(我认为是 0.5ish)进行缓存代理设置,在第一个 404 的情况下,它使用“重新启动”操作将请求发送到第二个后端。

新版本的 Varnish 似乎不支持这一点 - 似乎不再支持“重新启动”操作,并且不再识别“req.restarts”变量。这种行为可能吗?

该文档似乎已经过时,许多在线示例也是如此。man 7 vcl 似乎反映了当前的行为。

如果 Varnish 无法实现,您能否提出其他解决方案?

以下是我们旧 Varnish 配置的相关部分:

sub vcl_recv {

    # remove cookies
    remove req.http.Cookie;

    if (req.restarts == 0) {
        set req.backend = backend1;
    } else if (req.restarts == 1) {
        set req.backend = backend2;
    }

    # remove any query strings
    set req.url = regsub(req.url, "\?.*", "");

    # force lookup even when cookies are present
    if (req.request == "GET" && req.http.cookie) {
        lookup;
    }
}

sub vcl_fetch {
    # we might set a cookie from the Rails app
    remove obj.http.Set-Cookie;

    # force minimum ttl of 1 year
    if (obj.ttl < 31536000s) {
        set obj.ttl = 31536000s;
    }

    if (obj.status != 200 && obj.status != 302) {
        restart;
    }
}
4

1 回答 1

1

似乎此行为已在较新版本的 Varnish 中恢复。

于 2010-03-09T16:30:04.013 回答