unset in Varnish - синтаксическая ошибка - PullRequest
2 голосов
/ 20 мая 2010

Я пытаюсь скрыть заголовок «Server», возвращаемый 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;
--------#####-----------------

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 20 мая 2010

В последних версиях (серия 2.1) объект ответа называется beresp, и что-то подобное в vcl_fetch работает (я только что протестировал его на Varnish 2.1.0):

unset beresp.http.Server;

Я установил версию, которую вы используете (1.1.2), и получил то же поведение, которое вы упомянули; может показаться, что ключевое слово unset не работает, по крайней мере, в функции vcl_fetch. Это странно, так как по крайней мере один пример, который я нашел, упоминает использование unset для этой точной цели .

Если возможно, я бы предложил обновить до последней версии Varnish, поскольку я думаю, что маловероятно, что если наблюдаемое вами нестандартное поведение является ошибкой, команда будет готова исправить это.

За исключением этого, вы можете попробовать установить Server на что-то другое:

set obj.http.Server = "";
set obj.http.Server = "BogoServer Whatever"; 

Предполагая, что ваша цель - скрыть подпись сервера. Если вы хотите полностью удалить заголовок, я бы сказал, что это невозможно сделать с вашей версией Varnish.

1 голос
/ 01 июня 2010

Исправлено в конце концов.

У меня был возврат (pipe) в vcl_recv, из-за которого лак никогда не переходил в vcl_fetch, где я удалял заголовок.

1 голос
/ 28 мая 2010

Я нашел способ установить Varnish 2.1.2, который является самой последней версией на сегодняшний день.Я больше не получаю никаких синтаксических ошибок, но желаемый эффект не применяется.Этот упругий заголовок все еще там.

sub vcl_fetch {
    unset beresp.http.Server;
    set beresp.http.Server = "Apache";
}

Я использую Firebug для просмотра заголовков, вот что я вижу:

Server  Apache/2.2.9 (Debian)

Я пробовал некоторые варианты, такие как просто сбросить и ненастройка, ничего не работает.

Может ли это быть проблемой логики?Может быть, unset нужно поместить в другой sub .Я попытался разместить его в vcl_miss и vcl_deliver.Получил «Переменная» beresp.http.Server ', недоступный в методе… »оба раза.

Я также попытался установить собственный заголовок и удалить его.Это тоже не сработало.

1 голос
/ 20 мая 2010

Я использую Лак 1.1.2 Также тестируется с помощью beresp, и возникает та же ошибка.

Это как-то не так с unset. Вот полный выбор:

sub vcl_fetch {
    unset obj.http.Server;
    # force minimum ttl of 6 hours
    if (obj.ttl < 6h) {
            set obj.ttl = 6h;
    }
}
...