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

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

• 4 min read • Инфраструктура • Обновлено 25 Nov 2025
Установка Varnish Cache с Apache на Debian 11
Установка Varnish Cache с Apache на Debian 11

Схема: Varnish как фронтенд между клиентом и Apache

Что такое Varnish кратко

Varnish Cache — это высокопроизводительный HTTP-акселератор (reverse proxy / кэш) для ускорения веб-сайтов. Он хранит ответы в оперативной памяти и отдает их напрямую, снижая нагрузку на веб-сервер. Часто используется перед Apache/Nginx и в сочетании с CDN.

Требования

  • Сервер с Debian 11.
  • С root-доступ или пользователь с sudo.

План действий (коротко)

  1. Установить и перенастроить Apache на порт 8080.
  2. Добавить официальный репозиторий Varnish и установить пакет.
  3. Настроить /etc/varnish/default.vcl с бекендом на 127.0.0.1:8080.
  4. Создать systemd-override для запуска varnishd на порту 80.
  5. Перезапустить сервисы и проверить работоспособность.

Установка и настройка 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) — для глобального распределения контента.

Практическая методология развёртывания (мини-шаги)

  1. Тестируйте изменения конфигурации на отдельном окружении.
  2. Меняйте порт Apache и проверяйте доступность локально.
  3. Настройте VCL под ваши правила кэширования (cache-control, cookies, хедеры).
  4. Добавьте systemd-override и перезапустите varnishd.
  5. Наблюдайте метрики 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 —
    1. Отключите Varnish: systemctl stop varnish
    2. Проверьте Apache напрямую: curl -I http://127.0.0.1:8080/
    3. Верните корректный VCL или очистите кэш (varnishadm ban/purge), затем запустите varnish.

Итог

Вы установили и настроили Varnish как фронтенд для Apache на Debian 11. Теперь Varnish принимает запросы на порту 80 и проксирует их на Apache, работающий на 8080, что снижает нагрузку на бекенд и ускоряет отдачу контента.

Ключевые команды для отладки: varnishd -V, varnishstat, varnishlog, varnishadm.

Если нужно, могу помочь с примером VCL для кэширования конкретных путей, правилами invalidation (ban) или конфигурацией TLS-терминации перед Varnish.

Поделиться: 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 быстро