Гид по технологиям

Установка и настройка Varnish Cache с Apache на Ubuntu 22.04

• 5 min read • Инфраструктура • Обновлено 25 Nov 2025
Varnish + Apache на Ubuntu 22.04 — установка и настройка
Varnish + 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 и схема проксирования запросов между клиентом, Varnish и Apache

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 на страницах.
  • Определить, какие страницы можно безопасно кэшировать.

План отката и инцидентный рукоплан

  1. Отключить Varnish и вернуть Apache на порт 80.

    • Удалите drop-in конфигурацию или переименуйте её.
    • systemctl daemon-reload
    • Изменить /etc/apache2/ports.conf и 000-default.conf обратно на 80.
    • systemctl restart apache2
    • systemctl stop varnish
  2. Если нужно быстро — временно очистить правила 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 есть балансировщик.

Краткая методология внедрения

  1. Установить и настроить Apache на альтернативный порт.
  2. Установить Varnish и определить backend.
  3. Запустить Varnish на порту 80 через systemd drop-in.
  4. Проверить заголовки и метрики, затем постепенно включать кеширование страниц.
  5. Настроить мониторинг и автоматическую инвалидацию кеша (при необходимости).

Краткая терминология

  • 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 протестируйте поведение кеша для всех типов страниц (персонализированные, корзины, страницы входа).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро