我使用的是清漆4.0。
我的后端正在向一些响应添加 http 标头“x-count”
我想将“x-count”的值记录到带有换行符的文件中。
我认为我应该在 VCL 交付中进行。
这是我到目前为止所拥有的:
sub vcl_deliver {
if (resp.http.x-count-this:) {
set resp.http.X-infodbg = "xx";
C{
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fputs(VRT_GetHdr(sp, HDR_OBJ, "\013x-count-this:"), fp);
fputs("\n", fp);
fclose(fp);
}C
}
}
当然它不起作用并且有一些错误..
./vcl.gK2lu7uM.c:在函数“VGC_function_vcl_deliver”中:
./vcl.gK2lu7uM.c:1049:22: 错误:‘sp’未声明(在此首次使用
function) ./vcl.gK2lu7uM.c:1049:22: 注意:每个未声明的标识符
对于它出现的每个函数仅报告一次
./vcl.gK2lu7uM.c:1049:5: 错误:传递“VRT_GetHdr”的参数 2
从整数生成指针而不进行强制转换 [-Werror]
./vcl.gK2lu7uM.c:330:7:注意:预期为“const struct gethdr_s *”,但是
参数的类型为“int”./vcl.gK2lu7uM.c:1049:5: 错误:太多
函数‘VRT_GetHdr’的参数./vcl.gK2lu7uM.c:330:7:注意:
在这里声明
我不得不说,我只是从一些示例中复制/粘贴“sp”,但我不知道它来自哪里(我认为内联 C 位于不同的上下文中,因此它是在那里声明的,但不是在 vcl_deliver 中声明的)
因此,上述示例中 Varnish 4 和 3 之间可能未记录的差异是:
- VRT_GetHdr 现在是 VRT_GetHdr(context, struct gethdr_s)
- sp 不存在,但有一个“ctx”变量
找到了这个,那里:
http://jan.bogutzki.de/Artikel/395/set-ttl-in-varnish-4.html http://jan.bogutzki.de/Artikel/395/set-ttl-in-varnish-4.html
char *stuffid;
const struct gethdr_s hdr = { HDR_BERESP, "\015x-count-this:" };
stuffid = VRT_GetHdr(ctx, &hdr);
现在是一个不同的故事:一旦后端发送回“count-this”,Varnish 就会崩溃,但这是一个不同的问题:p(可能是我蹩脚的 C 代码)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)