varnish - 如何以varnishncsa客户端模式日志格式记录后端?

标签 varnish

我正在寻找一种方法来将后端名称(由backend vcl选项配置)包括在内,该名称是在varnishncsa日志输出中发送到(或从任一方式接收到的)响应的。

在客户端模式下运行varnishncsa时,即记录前端请求/响应。

日志格式在这里:https://varnish-cache.org/docs/trunk/reference/varnishncsa.html#format

我试图找到一个满足此选项的“扩展变量”(%{X}x),到目前为止还算不上运气。 Varnish 版本为6.x。

我是否需要为此设置一个自定义请求或响应 header 以进行匹配?

最佳答案

您可以使用扩展变量来完成工作。
来自后端请求的varnishncsa这是一个我为后端请求检索后端名称的示例:

varnishncsa -b -F "%{VSL:BackendOpen[2]}x"
您需要的VSL标记是BackendOpen标记,它将在varnishlog中返回以下输出:
-   BackendOpen    32 boot.bla 192.168.224.2 8080 192.168.224.3 53908
如您所见,后端名称是第二个字段,因此是BackendOpen[2]表达式。
客户请求中的varnishncsa在客户端线程中提示了后端,但未打开。
如果要访问提示的后端,则需要有权访问req.backend_hint变量。您可以使用std.log()将此值记录为VCL_Log标记。
这是VCL示例:
vcl 4.0;
import std;

backend default {
  .host="1.2.3.4";
  .port="80";
}

sub vcl_recv {
  std.log("Backend: "+ req.backend_hint);
}
这是varnishncsa命令,它将查找此值:
varnishncsa -c -F "%{VSL:VCL_Log:Backend}x"
结论
当然,您仍然需要稍微调整varnishncsa命令以包含正确的字段并过滤正确的参数,但是希望这个可以回答您的问题。
您可以在客户端请求端或后端请求端查找后端名称。

关于varnish - 如何以varnishncsa客户端模式日志格式记录后端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60395681/

相关文章:

http - Varnish:隐藏内部后端请求

caching - Varnish - 如何缓存登录用户

varnish - 对于 Varnish 级别的特定文件的所有请求,如何返回 500 响应?

http - 如果 Varnish 从主服务器收到 404 请求,是否可以将 Varnish 配置为尝试使用第二台服务器获取某些资源?

caching - 如何清除 Varnish 中的完整缓存?

varnish - 如何重定向特定的 url - Varnish?

python - 有没有办法绕过客户端的 Varnish 缓存?

Varnish 6 缺少来自不同浏览器的相同 URL 的请求

php - Varnish 不会缓存多个 wordpress

Varnish 302重定向到后端