我正在尝试隐藏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'无法访问。”。

我还尝试设置自定义标头并删除它。那也不起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top