题
我正在尝试隐藏Apache在每个请求中返回的“服务器”标题,从Varnish中隐藏。
在sub vcl_fetch中使用:
unset obj.http.Server;
在清漆开始,我得到了:
Expected action, 'if' or '}'
(/etc/varnish/default.vcl Line 43 Pos 9)
unset obj.http.Server;
--------#####-----------------
有任何想法吗?
解决方案
最终修复了它。
我在VCL_RECV中有一个返回(管道),使Varnish永远不会进入Vcl_fetch,在我揭开标题的情况下。
其他提示
在最近的版本(2.1系)中,响应对象称为beresp,在vcl_fetch中类似的东西 做 工作(我只是在Varnish 2.1.0上测试了):
unset beresp.http.Server;
我安装了您使用的版本(1.1.2),并获得了您提到的完全相同的行为;它将看起来未设置的关键字不起作用,至少在VCL_Fetch函数中不起作用。这很奇怪,至少一个例子我发现使用未设置提到 确切的目的.
如果可能的话,我建议您升级到最新的清漆,因为我认为,如果您观察到的不设置的行为是一个错误,那么团队将愿意修复它。
除此之外,您可能想尝试将服务器设置为其他东西:
set obj.http.Server = "";
set obj.http.Server = "BogoServer Whatever";
假设您的目标是隐藏服务器签名。如果您想要的是完全消除标题,我会说要说您的Varnish版本不能完成。
我正在使用Varnish 1.1.2也通过BERESP进行了测试,并且发生了相同的错误。
就像不设置有问题。这是完整的获取:
sub vcl_fetch {
unset obj.http.Server;
# force minimum ttl of 6 hours
if (obj.ttl < 6h) {
set obj.ttl = 6h;
}
}
我四处安装varnish 2.1.2,这是迄今为止最新的版本。我不再有任何语法错误,但是未应用所需的效果。这个弹性的标头仍在那里。
sub vcl_fetch {
unset beresp.http.Server;
set beresp.http.Server = "Apache";
}
我使用Firebug窥视标头,这就是我所看到的:
Server Apache/2.2.9 (Debian)
我尝试了一些变体,例如不设置而不设置,没有任何作用。
可以是逻辑的问题吗?也许不设置需要放置在不同的地方 子. 。我尝试将其放置在VCL_MISS和VCL_DELIVER中。两次都获得了“变量'beresp.http.server'无法访问。”。
我还尝试设置自定义标头并删除它。那也不起作用。