Caching 如果第一个后端为404,则使用清漆为1.0.3-2的第二个后端

Caching 如果第一个后端为404,则使用清漆为1.0.3-2的第二个后端,caching,proxy,http-status-code-404,backend,varnish,Caching,Proxy,Http Status Code 404,Backend,Varnish,我们曾经使用Varnish的早期版本(我想是0.5ish)进行缓存代理设置,该版本使用“重启”操作将请求发送到第二个后端(如果第一个后端是404) Varnish的新版本似乎不支持此操作-似乎不再支持“重新启动”操作,并且不再识别“req.restarts”变量。这种行为可能吗 文档似乎已经过时了,许多在线示例也是如此。man 7 vcl似乎反映了当前的行为 如果不能用清漆,你能建议另一种解决方案吗 以下是我们旧Varnish配置的相关部分: sub vcl_recv { # remo

我们曾经使用Varnish的早期版本(我想是0.5ish)进行缓存代理设置,该版本使用“重启”操作将请求发送到第二个后端(如果第一个后端是404)

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

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

如果不能用清漆,你能建议另一种解决方案吗

以下是我们旧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;
    }
}
sub-vcl\u recv{
#删除cookies
删除req.http.Cookie;
如果(请求重新启动==0){
设置req.backend=backend1;
}否则如果(请求重新启动==1){
设置req.backend=backend2;
}
#删除所有查询字符串
设置req.url=regsub(req.url,\?*,“”);
#即使存在cookie,也强制查找
if(req.request==“GET”&&req.http.cookie){
查找;
}
}
子vcl_取数{
#我们可以从Rails应用程序设置cookie
删除obj.http.Set-Cookie;
#部队最低ttl为1年
如果(obj.ttl<31536000秒){
设置obj.ttl=31536000秒;
}
if(obj.status!=200&&obj.status!=302){
重新启动;
}
}

最近版本的Varnish中似乎恢复了此行为。

最近版本的Varnish中似乎恢复了此行为