// blog

Как установить и настроить Varnish Cache на VPS Linux: полное руководство по ускорению сайта

August 28, 2026 · by Alex M.

Как установить и настроить Varnish Cache на VPS Linux: полное руководство по ускорению сайта

Если ваш сайт получает стабильный трафик, а время ответа сервера оставляет желать лучшего — Varnish Cache станет одним из самых эффективных решений. Это HTTP-акселератор (обратный прокси-кэш), который хранит ответы сервера в оперативной памяти и обслуживает запросы в десятки раз быстрее, чем без кэширования.

В этом руководстве мы установим и настроим Varnish Cache на VPS NVMe под управлением Linux с Ubuntu 22.04, используя Nginx в качестве бэкенд-сервера.

Что такое Varnish Cache и зачем он нужен?

Varnish работает как посредник между пользователем и вашим веб-сервером (Nginx или Apache). При поступлении запроса Varnish сначала проверяет наличие кэшированной версии страницы. Если она есть — отдаёт её мгновенно, не обращаясь к PHP, базе данных или другим ресурсам бэкенда.

Конкретные преимущества:
- Снижение времени ответа с сотен миллисекунд до менее чем 5 мс для кэшированных страниц
- Уменьшение нагрузки на CPU и RAM бэкенда
- Поддержка значительно большего числа одновременных посетителей
- Отличная совместимость с WordPress, Joomla, Magento и другими CMS

Для максимальной эффективности Varnish нужен сервер с достаточным объёмом RAM. Хорошим стартом будет VPS SSD с минимум 2 ГБ оперативной памяти.

Предварительные требования

Перед началом убедитесь, что у вас есть:
- VPS с Ubuntu 22.04 (или Debian 11/12)
- Root-доступ или права sudo
- Установленный и работающий Nginx
- Домен, указывающий на ваш сервер

Если сервер ещё не настроен, рассмотрите наши VPS с поддержкой для быстрого старта.

Шаг 1: Установка Varnish Cache

Обновите список пакетов:

sudo apt update && sudo apt upgrade -y

Установите Varnish из стандартных репозиториев Ubuntu:

sudo apt install varnish -y

Проверьте установленную версию:

varnishd -V

Для более новой версии (например, Varnish 7.x) используйте официальный репозиторий:

curl -s https://packagecloud.io/install/repositories/varnishcache/varnish74/script.deb.sh | sudo bash
sudo apt install varnish -y

Шаг 2: Настройка Nginx на порт 8080

Varnish будет слушать порт 80 (публичный HTTP), а Nginx будет работать на порту 8080 как бэкенд. Откройте конфигурацию Nginx:

sudo nano /etc/nginx/sites-available/default

Измените директиву listen:

server {
    listen 8080;
    server_name example.com www.example.com;

    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

Перезапустите Nginx:

sudo systemctl restart nginx

Шаг 3: Настройка Varnish на порт 80

Отредактируйте systemd-юнит Varnish с помощью override:

sudo systemctl edit varnish

Добавьте секцию [Service]:

[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd \
  -a :80 \
  -f /etc/varnish/default.vcl \
  -s malloc,256m

Перезагрузите systemd и перезапустите Varnish:

sudo systemctl daemon-reload
sudo systemctl restart varnish
sudo systemctl enable varnish

Шаг 4: Настройка VCL-файла (Varnish Configuration Language)

Основной файл конфигурации — /etc/varnish/default.vcl. Он написан на VCL — собственном языке конфигурации Varnish.

Откройте файл:

sudo nano /etc/varnish/default.vcl

Базовая конфигурация для WordPress:

vcl 4.1;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
    # Не кэшировать запросы авторизованных пользователей и корзины
    if (req.http.Cookie ~ "wordpress_logged_in|woocommerce_cart") {
        return(pass);
    }

    # Не кэшировать админку
    if (req.url ~ "^/wp-admin" || req.url ~ "^/wp-login.php") {
        return(pass);
    }

    # Удалить куки для статических файлов
    if (req.url ~ "\.(css|js|png|jpg|gif|ico|woff2|svg)$") {
        unset req.http.Cookie;
        return(hash);
    }

    return(hash);
}

sub vcl_backend_response {
    # Кэшировать на 1 час по умолчанию
    set beresp.ttl = 1h;
    set beresp.grace = 15m;
}

sub vcl_deliver {
    # Добавить заголовок для отладки
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
}

Перезапустите Varnish после внесения изменений:

sudo systemctl restart varnish

Шаг 5: Проверка работы кэша

Используйте curl для проверки работы Varnish:

curl -I http://example.com

Обратите внимание на заголовок X-Cache:

HTTP/1.1 200 OK
X-Cache: MISS   ← первый запрос (кэш пуст)

Повторите команду:

curl -I http://example.com
HTTP/1.1 200 OK
X-Cache: HIT    ← второй запрос (отдан из кэша)

Для статистики в реальном времени используйте:

varnishstat

Для просмотра живых запросов:

varnishlog

Шаг 6: Настройка HTTPS с Nginx как SSL-терминатором

Varnish не поддерживает HTTPS нативно. Стандартное решение — поставить Nginx на порт 443 в качестве SSL-терминатора, который передаёт расшифрованный трафик на Varnish (порт 80).

Полный поток: Клиент → Nginx:443 (SSL) → Varnish:80 → Nginx:8080 (бэкенд)

Добавьте в Nginx блок server для HTTPS:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Если у вас ещё нет SSL-сертификата, ознакомьтесь с нашими SSL-сертификатами или настройте бесплатный Let's Encrypt через Certbot.

Шаг 7: Инвалидация кэша (Purge)

При публикации нового контента необходимо очищать кэш Varnish. Добавьте поддержку purge в VCL:

acl purge {
    "127.0.0.1";
    "localhost";
}

sub vcl_recv {
    if (req.method == "PURGE") {
        if (!client.ip ~ purge) {
            return(synth(405, "Not allowed"));
        }
        return(purge);
    }
    # ... остальная конфигурация
}

Отправьте команду purge вручную:

curl -X PURGE http://example.com/page-to-purge

Для WordPress существует плагин Proxy Cache Purge (бывший Varnish HTTP Purge), который автоматизирует этот процесс.

Дополнительные оптимизации

  • Увеличьте объём кэша: Отредактируйте параметр -s malloc,256m, установив большее значение (512m или 1g) в зависимости от доступной RAM
  • Grace mode: Позволяет Varnish отдавать устаревший контент, пока бэкенд обновляется — снижает воспринимаемую задержку
  • Saint mode: Предотвращает отправку трафика на бэкенд, возвращающий ошибки
  • Directors: Распределяют нагрузку между несколькими бэкендами для масштабируемости

Если ваш сайт вырос и Varnish уже не справляется, рассмотрите выделенный управляемый сервер для более сложных архитектурных решений.

Мониторинг Varnish

Полезные команды для мониторинга:

# Глобальная статистика
varnishstat -1

# Соотношение попаданий и промахов кэша
varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss

# Фильтрованные логи
varnishtop -i RespHeader

Показатель попаданий (hit rate) выше 80% считается отличным. Если он ниже 50%, пересмотрите правила VCL — возможно, слишком много контента исключено из кэширования.

Заключение

Varnish Cache — мощный инструмент, способный кардинально улучшить скорость вашего сайта при относительно небольших усилиях по настройке. В сочетании с быстрым VPS NVMe и действующим SSL-сертификатом вы получаете современную веб-инфраструктуру, способную выдерживать высокий трафик при минимальных ресурсах.

Если вы предпочитаете доверить настройку сервера профессионалам, команда CLIQHOST предлагает услуги администрирования серверов Linux. Свяжитесь с нами через страницу контактов или найдите больше полезных материалов в нашем техническом блоге.

SHARE
// Что говорят наши клиенты

Что говорят наши клиенты

Реальные отзывы клиентов, которые доверяют CLIQHOST за производительность, надёжность и профессиональную техническую поддержку.

★★★★★

"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."

AM
Andrei M.
eCommerce owner · Chișinău
★★★★★

"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."

EV
Elena V.
Web agency · Bălți
★★★★★

"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."

DC
Dmitri C.
SaaS founder · Chișinău