我在 Debian Wheezy 系统上使用 Varnish 3.0.2。我希望能够设置自定义标头并让其内容出现在请求日志中。但是,尽管我知道标头正在设置并传递到后端,但它们的内容似乎对 不可见varnishncsa
。
在我的vcl_recv
我有
set req.http.X-my-header = "blahblah";
并且,为了测试,这是我的自定义格式字符串varnishncsa
:
'%{X-my-header}i'
我应该blahblah
在每个请求的日志中看到。但是,我得到的只是-
。似乎我的标头没有传递到varnishncsa
。
如何在我的日志中包含自定义标题?
答案1
我刚刚遇到了这个问题,这是搜索时得到的最佳结果,所以我将在这里发布我的解决方案/解决方法以供将来参考:)
varnishncsa
std.log("key:value")
可以记录VCL中设置的值1。我用它来记录我的自定义标头。使用您的示例,将其添加到您的vcl_recv
:
set req.http.X-my-header = "blahblah";
std.log("X-my-header:" + req.http.X-my-header);
然后在日志格式字符串的某处使用以下内容varnishncsa
(注意标题名称后面的 x 而不是 i):
%{VCL_Log:X-my-header}x
答案2
我认为 Varnish Book 在解释如何记录标头时存在错误。试试这个:
varnishncsa -F '<%{age}o> <%{x-cache}o> %U %s'