2010-05-19 4 views
2

Я пытаюсь скрыть заголовок «Сервер», возвращенный Apache по каждому запросу, от Varnish.unset in Varnish - ошибка синтаксиса

Использование в подразделе vcl_fetch:

unset obj.http.Server; 

на Varnish начала я получаю:

Expected action, 'if' or '}' 
(/etc/varnish/default.vcl Line 43 Pos 9) 
    unset obj.http.Server; 
--------#####----------------- 

Любые идеи?

ответ

1

Исправлено.

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

2

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

unset beresp.http.Server; 

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

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

Запрещая что, вы можете попытаться установить сервер на что-то другое:

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

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

1

Я использую 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; 
    } 
} 
+0

Спасибо за разъяснение - я обновил свой ответ. – Roadmaster

1

я удосужился установить 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. Получил «Variable» beresp.http.Server «недоступен в методе ..» оба раза.

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

 Смежные вопросы

  • Нет связанных вопросов^_^