Установка и настройка Varnish Cache с Apache на Ubuntu 22.04
TL;DR
Varnish Cache — быстрый HTTP-акселератор для сайтов с высокой посещаемостью. В этой статье показано, как установить Varnish 7 на Ubuntu 22.04 и связать его с Apache: перенос Apache на порт 8080, установка репозитория Varnish, настройка backend в /etc/varnish/default.vcl и запуск Varnish на порту 80. Включены чеклисты, план отката и советы по безопасности.

Varnish Cache — это высокопроизводительный HTTP-акселератор, предназначенный для динамичных сайтов с большой нагрузкой. Он выступает посредником между клиентом и сервером и перехватывает входящие запросы до того, как они достигнут бэкенда. Varnish хранит кешированные копии страниц. Если пользователь запрашивает закешированную страницу, Varnish отдаёт её напрямую, не обращаясь к бэкенду. Это делает полнотекстовый (Full Page) кеш Varnish особенно полезным для интернет-магазинов с тысячами товаров и большим трафиком.
В этой статье показано, как установить Varnish и настроить его совместно с Apache на Ubuntu 22.04.
Требования
- Сервер с Ubuntu 22.04.
- Настроен пароль root или пользователь с sudo-привилегиями.
Установка и настройка Apache
Перед началом убедитесь, что Apache установлен. Если нет, установите его:
apt install apache2 -yДалее изменим конфигурацию Apache, чтобы он слушал другой порт (например, 8080), а Varnish мог слушать порт 80.
Откройте файл портов Apache:
nano /etc/apache2/ports.confНайдите строку:
Listen 80Замените её на:
Listen 8080Сохраните и закройте файл, затем отредактируйте виртуальный хост по умолчанию:
nano /etc/apache2/sites-available/000-default.confНайдите:
И замените на:
Сохраните, закройте и перезапустите Apache:
systemctl restart apache2Проверьте, что Apache слушает порт 8080:
ss -antpl | grep 8080Ожидаемый вывод похож на:
LISTEN 0 511 *:8080 *:* users:(("apache2",pid=2553,fd=4),("apache2",pid=2552,fd=4),("apache2",pid=2551,fd=4))Если вы видите слушающий процесс apache2 на 8080 — настройка успешна.
Установка Varnish Cache
Ubuntu по умолчанию может не содержать последнюю версию Varnish. Добавим официальный репозиторий Varnish в APT.
Сначала установите зависимости:
apt install debian-archive-keyring curl gnupg apt-transport-https -yДобавьте GPG-ключ репозитория Varnish:
curl -fsSL https://packagecloud.io/varnishcache/varnish70/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/varnish.gpgСоздайте файл-источник для APT:
nano /etc/apt/sources.list.d/varnishcache_varnish70.listДобавьте строки:
deb https://packagecloud.io/varnishcache/varnish70/ubuntu/ focal main
deb-src https://packagecloud.io/varnishcache/varnish70/ubuntu/ focal mainСохраните и закройте. Затем создайте файл предпочтений:
nano /etc/apt/preferences.d/varnishДобавьте:
Package: varnish
Pin: origin packagecloud.io
Pin-Priority: 900Обновите кэш APT и установите varnish:
apt update
apt install varnish -yПосле установки отредактируйте файл /etc/varnish/default.vcl и определите бэкенд (Apache на 127.0.0.1:8080):
nano /etc/varnish/default.vclИзмените или добавьте блок backend таким образом:
backend default {
.host = "127.0.0.1";
.port = "8080";
}Сохраните изменения.
Настройка systemd для работы Varnish на 80 порту
Создадим пользовательскую конфигурацию systemd, чтобы Varnish слушал порт 80 и использовал наш default.vcl:
mkdir /etc/systemd/system/varnish.service.d
nano /etc/systemd/system/varnish.service.d/customport.confДобавьте:
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -a :80 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,256mСохраните и выполните:
systemctl daemon-reload
systemctl restart varnishПроверьте статус:
systemctl status varnishВы должны увидеть сервис varnish активным и слушающим порт 80. Также проверьте порты:
ss -antpl | grep :80Ожидаемый вывод содержит процессы varnishd на :80 и apache2 на :8080.
Проверка работы Varnish
Используйте curl для проверки заголовков ответа:
curl -I http://localhost/В ответе должны быть заголовки, указывающие на Varnish, например X-Varnish, Via и Age.
Когда Varnish подходит и когда нет
- Подходит: сайты с высокой долей статического или повторяющегося контента, каталоги товаров, страницы, которые можно кэшировать целиком.
- Не подходит: полностью динамические страницы с персонализированным контентом для каждого пользователя (без возможности вариации кеша), realtime-приложения, где важна мгновенная консистентность данных.
Важно: можно комбинировать Varnish с механизмами инвалидации/обновления кеша по API или через заголовки, чтобы работать с частично динамичным контентом.
Альтернативные подходы
- Nginx как reverse proxy + fastcgi_cache — хорошая альтернатива для простых случаев и интеграции с PHP.
- CDN (Cloudflare, Fastly) — выносят кеш ближе к пользователю, уменьшают нагрузку на origin.
- HAProxy + Nginx — для сложных балансировок и SSL-терминации.
Выбор зависит от требований: масштабируемость, SSL, правила кеширования и бюджет.
Чеклист ролей перед и после установки
Администратор системы:
- Убедиться в резервных копиях конфигураций Apache и Varnish.
- Настроить swap и мониторинг (CPU, память).
- Проверить SELinux/AppArmor (при использовании).
DevOps / Инфраструктура:
- Настроить процессы деплоя конфигураций (ansible/terraform).
- Добавить healthchecks и alerting для varnishd и apache2.
Разработчик:
- Проверить заголовки Cache-Control на страницах.
- Определить, какие страницы можно безопасно кэшировать.
План отката и инцидентный рукоплан
Отключить Varnish и вернуть Apache на порт 80.
- Удалите drop-in конфигурацию или переименуйте её.
- systemctl daemon-reload
- Изменить /etc/apache2/ports.conf и 000-default.conf обратно на 80.
- systemctl restart apache2
- systemctl stop varnish
Если нужно быстро — временно очистить правила iptables, маршрутизацию или использовать временную запись A/hosts для перенаправления трафика.
Критерии успеха отката:
- Сайт отвечает напрямую от Apache на порту 80.
- Отсутствие ошибок 5xx в логах после отката.
Тесты и критерии приёмки
- Функциональные: curl -I http://localhost/ — в заголовках присутствует X-Varnish и Via.
- Нагрузочные: снижения среднего времени ответа при кешируемых запросах (локально тестируем с ab или wrk).
- Консистентность: при обновлении контента проверять инвалидацию кеша и появление актуальной версии.
Примечания по безопасности и производительности
- SSL: Varnish не шифрует трафик. Делайте SSL-терминацию на уровне Nginx/HAProxy/Apache или используйте PROXY vmod для TLS-пересылки.
- Ограничьте доступ к административному порту Varnish (обычно 6082) только для доверенных хостов.
- Настройте лимиты памяти и размер кеша в systemd/ExecStart (опция -s malloc,
или file). - Мониторьте метрики: cache hit rate, hit/miss ratio, backend response times.
Быстрые советы (эвристики)
- Начните с кеша 256–512 МБ на небольшом сервере и увеличивайте при необходимости.
- Всегда тестируйте правила Cache-Control и Vary. Неправильные заголовки приводят к низкому hit rate.
- Используйте X-Forwarded-For и PROXY-протокол, если за Varnish есть балансировщик.
Краткая методология внедрения
- Установить и настроить Apache на альтернативный порт.
- Установить Varnish и определить backend.
- Запустить Varnish на порту 80 через systemd drop-in.
- Проверить заголовки и метрики, затем постепенно включать кеширование страниц.
- Настроить мониторинг и автоматическую инвалидацию кеша (при необходимости).
Краткая терминология
- Backend — исходный веб-сервер (Apache) откуда Varnish получает контент.
- Hit — запрос, обслуженный из кеша.
- Miss — запрос, требующий обращения к бэкенду.
- Invalidation — удаление/обновление закешированного объекта.
Резюме
Вы установили Varnish и связали его с Apache на Ubuntu 22.04: Apache работает на 127.0.0.1:8080, Varnish слушает 0.0.0.0:80 и проксирует запросы к Apache. Добавлены рекомендации по безопасности, план отката, чеклисты по ролям и способы валидации результата.
Если вам нужно: автоматизировать установку (Ansible), настроить инвалидацию кеша через API или добавить SSL-терминацию — скажите, и я подготовлю пошаговый план.
Важно: перед внедрением в production протестируйте поведение кеша для всех типов страниц (персонализированные, корзины, страницы входа).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента