将X-Varnish标头设置为后端服务器,但保留在对客户端的响应中

时间:2019-11-06 14:40:32

标签: varnish varnish-vcl varnish-4

当前,我将配置从Varnish 3迁移到Varnish 6。

但是我有一个问题,涉及将标头设置为后端,但将其保留在后端。

实际上,我无法在vcl_backend_response中使用它,因为它在(vcl_pass / vcl_backend_fetch)之前未设置...

在文档(https://book.varnish-software.com/4.0/chapters/VCL_Subroutines.html)中,我看到“如果您不希望将X-Varnish标头发送到后端服务器,则可以在vcl_miss或vcl_pass中将其删除。对于这种情况,您可以可以使用未设置的bereq.http.x-varnish;。”但是我不能在vcl_miss / vcl_pass中使用bereq。

您是否知道如何将此标头保留在vcl_backend_response中,但不将其发送到后端?

在Varnish 3中,我在vcl_miss / vcl_pass中使用了它,未设置的bereq在vcl_fetch中设置了。

最诚挚的问候,

vcl 4.1;
import std;

backend dev {
  .host = "127.0.0.1";
  .port = "8080";
}

sub vcl_recv {
  set req.http.App="App1";
  set req.backend_hint = dev;
  return (hash);
}

sub vcl_miss {
  unset req.http.App;
}

sub vcl_pass {
  unset req.http.App;
}

sub vcl_backend_fetch {
  unset bereq.http.App;
}

sub vcl_backend_response {
  if (bereq.http.App) {
    set beresp.http.Debug = "test";
    set beresp.ttl = 10s;
    set beresp.grace = 10s;
    return (deliver); // not applied
  }
}

sub vcl_deliver {
  set res.http.App;
}
  • 当前:未设置后端和客户端的应用标头(无法使用) 在vcl_backend_response中)
  • 目标:应用程序标头可用于vcl_backend_response中的条件,但不能发送到后端

0 个答案:

没有答案