Кэширование с 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.

Самое важное

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

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023