August 28, 2026 · by Alex M.
Если ваш сайт получает стабильный трафик, а время ответа сервера оставляет желать лучшего — Varnish Cache станет одним из самых эффективных решений. Это HTTP-акселератор (обратный прокси-кэш), который хранит ответы сервера в оперативной памяти и обслуживает запросы в десятки раз быстрее, чем без кэширования.
В этом руководстве мы установим и настроим Varnish Cache на VPS NVMe под управлением Linux с Ubuntu 22.04, используя Nginx в качестве бэкенд-сервера.
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 с поддержкой для быстрого старта.
Обновите список пакетов:
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
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
Отредактируйте 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
Основной файл конфигурации — /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
Используйте 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
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.
При публикации нового контента необходимо очищать кэш 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Если ваш сайт вырос и 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. Свяжитесь с нами через страницу контактов или найдите больше полезных материалов в нашем техническом блоге.
Реальные отзывы клиентов, которые доверяют 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."
"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."
"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."