Как настроить Varnish так, чтобы все ответы на запросы, соответствующие запросу «* .css», кэшировались в браузере клиента на 30 дней?
Я пытаюсь добиться, чтобы Varnish установил правильные настройки «Expires:» и / или «Cache-Control», чтобы все CSS: s кэшировались в течение 30 дней независимо от того, что серверная часть говорит о кешируемости на стороне клиента эти объекты.
Это помогает:
sub vcl_fetch {
..
if (req.url ~ "\.css$") {
set obj.http.magicmarker = "1";
}
..
}
sub vcl_deliver {
..
if (resp.http.magicmarker) {
unset resp.http.magicmarker;
set resp.http.Cache-Control = "...";
set resp.http.Expires = "...";
set resp.http.Age = "...";
}
..
}
Мне просто нужно отметить, что лак отлично подходит для переписывания заголовков. Проверка любого URL-адреса возможна в vcl_recv, а в vcl_fetch это обычное приложение для varnish. В recv вы анализируете входящий запрос. В fetch вы анализируете ответ серверной части.
Как правило, вы манипулируете запросом в recv и направляете его в бэкэнд, а также манипулируете ответом в выборке и переписываете заголовки в соответствии с требованиями, прежде чем потенциально сохранить объект в кеше и доставить ответ.
В выборке вы можете сделать
unset beresp.http.expires;
unset beresp.http.cache-control;
так же как
set beresp.http.Cache-Control = "max-age = 2678406";
и так далее.
Я не думаю, что Varnish позволит вам ограничить правила VCL до "* .css". Возможно, вам придется спросить в списке рассылки Varnish точную информацию по этому поводу. Должна быть возможна область действия по типу MIME.
Предполагая, что у ваших объектов уже установлены заголовки кеша, но вы хотите их нормализовать, тогда вам должна помочь модифицированная версия этой VCL документации Varnish: http://varnish.projects.linpro.no/wiki/VCLExampleLongerCaching
В общем, Varnish не был создан для переписывания больших объемов заголовков или содержимого. Ваши веб-серверы или веб-приложение должны делать это лучше, чем Varnish.