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 позволяет гибко настроить работу кэша. Файл с настройками обычно находится тут:
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 (не забывая убрать комментарии с соотв. секций).
По умолчанию 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);
}
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), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…