Кэширование с Varnish

Ігор Грегорченко

Varnish – это гибкое решение для кэширования страниц на уровне Web сервера.

Установка и запуск

Varnish можно поставить практически на все известные дистрибутивы линуксов и юниксов. Для Debian все выглядит так:

sudo apt-get install varnish

Общая архитектура

[ad]

Обычно Varnish ставится перед другим Web сервером на 80 порт. Таким образом он будет принимать все запросы от клиентов. Если Varnish на 80 порту нежелателен (например, он может хуже справляться с обработкой запросов, чем Nginx), его можно поставить на другой порт (6081) и организовать связку Nginx[80]-Varnish[6081]-Nginx[81].

Мы рассмотрим случай, когда Varnish слушает 80 порт.

Включение кэша

В случае с Debian, необходимо настроить параметры запуска Varnish в файле:

nano /etc/default/varnish

В параметре DAEMON_OPTS указываем:

DAEMON_OPTS="-a :80

-T localhost:6082

-f /etc/varnish/default.vcl

-S /etc/varnish/secret

-t 120

-s malloc,256m”

## Мы установим 256Мб на размер кэша и время кэширования в 120 секунд по умолчанию

VCL

VCL позволяет гибко настроить работу кэша. Файл с настройками обычно находится тут:

nano /etc/varnish/default.vcl

Файл делится на несколько секций, но то что нужно для начала работы – это указание бекендов. Бекенд – это адрес сервера, на который Varnish будет отправлять запросы, если у него в кэше ничего нет. Ответ от бекендов будет кэшироваться.

backend www {

.host = “127.0.0.1”;

.port = “81”;

}
## Varnish будет отправлять запросы на 81 порт

На 81 порту теперь должен быть доступен наш основной сайт, т.е. главный сервер нужно перенести на 81 порт. Если это Nginx:
server {

listen 81;

}

Чтобы все заработало, перезапускаем Varnish:

/etc/init.d/varnish restart

VCL является почти целым языком разработки. Все инструкции необходимо писать в файл default.vcl (не забывая убрать комментарии с соотв. секций).

Cookie и статика

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

sub vcl_recv {

if (req.url ~ “.(css|js|png|gif|jp(e)?g)”) {

unset req.http.cookie;

}

return (lookup);

}

Большие файлы

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

sub vcl_recv {

if (req.url ~ “.(mp4|mp3|avi)”) {

return (pass);

}

return (lookup);

}

Время кэша (ttl)

VCL также позволяет переопределять время кэша. Это позволит использовать разное время для разных условий:
sub vcl_recv {

set req.grace = 2m;

if (req.url ~ “.(png|jpe?g|gif)”) {

set req.grace = 1h;

}

}

sub vcl_fetch {

set beresp.grace = 1h;

}

## Кэшируем все на 2 минуты, картинки на 1 час и сохраняем все минимум на 1 час

Динамические страницы

Varnish поддерживает специальный механизм кэширования динамических страниц с помощь ESI.

Самое важное

Использование кэширования часто снижает нагрузку на сервер в несколько десятков или даже сотен раз.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024