【问题标题】:Varnish pass-through route清漆通过路线
【发布时间】:2021-09-17 17:14:29
【问题描述】:

我的应用程序前面有一个 Varnish 缓存设置。我希望某些路由不被缓存,而是完全传递给其他服务。 我需要保留像 X-Forwarded-For 这样的标头,这样底层服务就不会注意到任何东西。

我已经尝试过“管道”配置,但它没有像我例外的那样工作。 我正在寻找完整的配置部分。

我尝试过的配置如下:

backend blog {
    .host = "127.0.0.1";
    .port = "8083";
}

sub vcl_recv {
    if (req.url ~ "^/blog/") {
        set req.backend_hint = blog;
        return (pipe);
    } else {
        set req.backend_hint = default;
    }
}

【问题讨论】:

    标签: varnish varnish-vcl


    【解决方案1】:

    您正在寻找return(pass),它不会从缓存中提供内容并直接连接到后端。

    return(pipe) 逻辑仅在您不确定传入请求是否实际上是 HTTP 请求时才有用。通过管道发送请求,您可以消除 HTTP 的所有概念,并将数据简化为纯 TCP。

    感谢return(pass) 维护所有标头。

    这是您的代码示例的更新版本:

    vcl 4.1;
    
    backend blog {
        .host = "127.0.0.1";
        .port = "8083";
    }
    
    sub vcl_recv {
        if (req.url ~ "^/blog/") {
            set req.backend_hint = blog;
            return (pass);
        } else {
            set req.backend_hint = default;
        }
    }
    

    【讨论】:

    • 我也试过通过,但由于某种原因它没有奏效。我再试一次,谢谢!
    • @VladimirRozhkov 请将以下命令的输出附加到您的问题中:varnishlog -g request -q "ReqUrl ~ '^/blog.'"。这将帮助我们了解return(pass) 会失败。
    • 看起来传球成功了。一切正常,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2016-12-25
    相关资源
    最近更新 更多