Установка Varnish Cache с Apache на Debian 11

Что такое Varnish кратко
Varnish Cache — это высокопроизводительный HTTP-акселератор (reverse proxy / кэш) для ускорения веб-сайтов. Он хранит ответы в оперативной памяти и отдает их напрямую, снижая нагрузку на веб-сервер. Часто используется перед Apache/Nginx и в сочетании с CDN.
Требования
- Сервер с Debian 11.
- С root-доступ или пользователь с sudo.
План действий (коротко)
- Установить и перенастроить Apache на порт 8080.
- Добавить официальный репозиторий Varnish и установить пакет.
- Настроить /etc/varnish/default.vcl с бекендом на 127.0.0.1:8080.
- Создать systemd-override для запуска varnishd на порту 80.
- Перезапустить сервисы и проверить работоспособность.
Установка и настройка Apache
Установите Apache:
apt install apache2 -yПо умолчанию Apache слушает порт 80. Поменяйте порт на 8080 в конфигурации портов:
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 apache2Ожидаемый вывод содержит запись LISTEN на *:8080.
Важно: если у вас есть firewall (ufw, iptables), убедитесь, что порт 8080 открыт для локальных подключений, но не обязательно для внешних.
Добавление репозитория и установка Varnish на Debian 11
По умолчанию в репозиториях Debian может не быть последней версии Varnish. Добавим официальный репозиторий packagecloud.
Установите зависимости:
apt install debian-archive-keyring curl gnupg apt-transport-https -yДобавьте GPG-ключ Varnish:
curl -fsSL https://packagecloud.io/varnishcache/varnish70/gpgkey | gpg --dearmor -o /etc/apt/trusted.gpg.d/varnish.gpgСоздайте файл источника:
nano /etc/apt/sources.list.d/varnishcache_varnish70.listДобавьте строки:
deb https://packagecloud.io/varnishcache/varnish70/debian/ bullseye main
deb-src https://packagecloud.io/varnishcache/varnish70/debian/ bullseye mainОбновите кэш APT и установите Varnish:
apt update -y
apt install varnish -yЗапустите/перезапустите Varnish и проверьте версию:
systemctl restart varnish
varnishd -VОжидаемый вывод содержит версию varnish-7.x.
Настройка backend в Varnish
Откройте основной файл конфигурации Varnish:
nano /etc/varnish/default.vclУкажите backend (в нашем примере Apache на 127.0.0.1:8080):
backend default {
.host = "127.0.0.1";
.port = "8080";
}Сохраните и закройте файл.
Настройка systemd для запуска Varnish на порту 80
Создайте директорию для переопределений systemd и файл с кастомными параметрами:
mkdir -p /etc/systemd/system/varnish.service.d
nано /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Перезагрузите демон systemd и перезапустите Varnish:
systemctl daemon-reload
systemctl restart varnishПроверьте статус сервиса:
systemctl status varnishОжидаемый вывод подтверждает, что varnish.service активен и использует указанные параметры запуска.
Проверьте, что Varnish слушает на порту 80 и 127.0.0.1:8443:
ss -antpl | grep :varnishdВерификация работы Varnish
Проверьте заголовки ответа через curl:
curl -I http://localhost/Вы увидите заголовки типа “Via: 1.1 varnish (Varnish/7.0)”, “X-Varnish” и “Age” — это подтверждает, что запрос прошёл через Varnish.
Пример:
HTTP/1.1 200 OK
Date: Fri, 30 Dec 2022 05:33:00 GMT
Server: Apache/2.4.54 (Debian)
Vary: Accept-Encoding
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/7.0)Безопасность и рекомендации по эксплуатации
- Ограничьте прямой доступ к Apache: разрешите внешний трафик только на порт 80 (Varnish). Бекенд может слушать на 127.0.0.1:8080.
- Для HTTPS: Varnish не шифрует трафик. Терминируйте TLS на балансировщике/NGINX/HAProxy или используйте формат PROXY (как в примере с localhost:8443,PROXY) и на уровне фронта — TLS.
- Мониторинг: следите за памятью, величиной кэша и показателями hit/miss с помощью varnishstat и varnishlog.
- Параметры памяти: в ExecStart используется -s malloc,256m — настройте в зависимости от объёма оперативной памяти.
Когда Varnish может не подойти
- Если приложение использует сложную per-user авторизацию, где ответы уникальны для каждого клиента, кэширование на уровне HTTP может приносить ошибки.
- Для чисто статических сайтов проще и надёжнее использовать CDN.
- Если нужна встроенная TLS-терминация непосредственно в прокси — Varnish не решает это сам по себе.
Альтернативы и сочетания
- Nginx (как обратный прокси и статический сервер).
- HAProxy или Traefik — для балансировки и TLS-терминации.
- CDN (Cloudflare, Fastly, S3 + CloudFront) — для глобального распределения контента.
Практическая методология развёртывания (мини-шаги)
- Тестируйте изменения конфигурации на отдельном окружении.
- Меняйте порт Apache и проверяйте доступность локально.
- Настройте VCL под ваши правила кэширования (cache-control, cookies, хедеры).
- Добавьте systemd-override и перезапустите varnishd.
- Наблюдайте метрики hit/miss и корректируйте TTL.
Контрольные чек-листы по ролям
Системный администратор
- Установил Apache и перенёс его на 8080.
- Открыл нужные порты в firewall.
- Настроил systemd-override для Varnish.
DevOps / Инженер релизов
- Протестировал VCL в staging.
- Настроил мониторинг varnishstat/varnishlog.
- Проверил интеграцию с TLS-терминацией (NGINX/HAProxy).
Разработчик
- Проверил заголовки Cache-Control и Vary.
- Обеспечил, что ответы, которые не должны кэшироваться, помечены корректно.
Краткий словарь (1 строка)
- VCL — конфигурационный язык Varnish для правил кэширования.
- Hit — запрос обслужен из кэша.
- Miss — запрос пришёл в бекенд, не было кэша.
Примеры отказов и откат (runbook)
- Проблема: сайт возвращает неправильный контент после включения Varnish —
- Отключите Varnish: systemctl stop varnish
- Проверьте Apache напрямую: curl -I http://127.0.0.1:8080/
- Верните корректный VCL или очистите кэш (varnishadm ban/purge), затем запустите varnish.
Итог
Вы установили и настроили Varnish как фронтенд для Apache на Debian 11. Теперь Varnish принимает запросы на порту 80 и проксирует их на Apache, работающий на 8080, что снижает нагрузку на бекенд и ускоряет отдачу контента.
Ключевые команды для отладки: varnishd -V, varnishstat, varnishlog, varnishadm.
Если нужно, могу помочь с примером VCL для кэширования конкретных путей, правилами invalidation (ban) или конфигурацией TLS-терминации перед Varnish.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента