Установка Varnish 7 перед Nginx на Rocky Linux 8

TL;DR
Varnish 7 устанавливают перед Nginx, чтобы отдавать кэшированные ответы из памяти и ускорять сайт. В руководстве показаны команды для Rocky Linux 8: установка репозиториев, установка Varnish, перевод Varnish на порт 80 и изменение Nginx на порт 8080.
К чему это руководство
Это практическое руководство по быстрой установке и настройке Varnish Cache 7 в качестве фронта для Nginx на Rocky Linux 8. Подойдёт системным администраторам и инженерам DevOps, которые хотят уменьшить время отклика сайта и снизить нагрузку на бэкэнд.
Предварительные требования
- Сервер с Rocky Linux 8.
- Доступ root или пользователь с sudo.
Установка Varnish 7
- Отключите существующие модули varnish, если они есть:
dnf module disable varnishОжидаемый диалог подтверждения и завершения отключения модуля.
- Установите репозиторий EPEL:
dnf install epel-release -y- Добавьте репозиторий Varnish Cache 7:
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.rpm.sh | bash- Установите Varnish:
dnf install varnish -y- Проверьте установленный пакет:
rpm -qi varnishПример вывода (показывает информацию о пакете, версии и ссылке на сайт проекта):
Name : varnish
Version : 7.0.2
Release : 1.el8
Architecture: x86_64
Install Date: Sunday 13 February 2022 06:24:35 AM UTC
Group : System Environment/Daemons
Size : 8907085
License : BSD
Signature : (none)
Source RPM : varnish-7.0.2-1.el8.src.rpm
Build Date : Wednesday 12 January 2022 02:25:34 PM UTC
Build Host : 7fc509e75620
Relocations : (not relocatable)
URL : https://www.varnish-cache.org/
Summary : High-performance HTTP accelerator
Description :
This is Varnish Cache, a high-performance HTTP accelerator.Управление сервисом Varnish
Запустите Varnish и включите автозапуск:
systemctl start varnish
systemctl enable varnishПроверить статус:
systemctl status varnishПример статуса показывает, что сервис запущен и активен (active). Обратите внимание на PID и параметры запуска varnishd.
Настройка Varnish для прослушивания на порту 80
По умолчанию Varnish слушает на порту 6081. Чтобы Varnish принимал входящие HTTP-запросы на 80 порту, измените системный unit:
nano /usr/lib/systemd/system/varnish.serviceНайдите строку ExecStart и замените порт 6081 на 80. Пример:
ExecStart=/usr/sbin/varnishd -a :80 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,2gВажно: здесь мы указываем выделение памяти для кэша через опцию -s malloc,2g. Подберите значение под объём оперативной памяти на сервере.
Примените изменения:
systemctl daemon-reload
systemctl restart varnishУбедитесь, что Varnish слушает нужные порты:
ss -antpl | grep varnishОжидаемый результат покажет прослушиваемые порты, например 0.0.0.0:80 и localhost:8443.
LISTEN 0 10 127.0.0.1:46093 0.0.0.0:* users:(('varnishd',pid=2819,fd=13))
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(('cache-main',pid=2830,fd=6),('varnishd',pid=2819,fd=6))
LISTEN 0 128 127.0.0.1:8443 0.0.0.0:* users:(('cache-main',pid=2830,fd=9),('varnishd',pid=2819,fd=9))Настройка Nginx для работы с Varnish
Установите Nginx:
dnf install nginx -yИзмените основной конфиг Nginx, чтобы Nginx слушал на порту 8080 (вместо 80). Откройте файл:
nano /etc/nginx/nginx.confНайдите строки:
listen 80 default_server;
listen [::]:80 default_server;Замените на:
listen 8080 default_server;
listen [::]:8080 default_server;Запустите Nginx и проверьте статус:
systemctl start nginx
systemctl status nginxВ статусе вы увидите проверку синтаксиса конфига и запуск процессов master/worker.
? nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2022-02-13 06:29:02 UTC; 8s ago
Process: 5627 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)Проверка работы Varnish
Проверьте HTTP-заголовки, чтобы убедиться, что Varnish обслуживает трафик:
curl -I http://your-server-ipОжидаемый ответ включает заголовок X-Varnish и Via с упоминанием Varnish:
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 13 Feb 2022 06:30:06 GMT
Content-Type: text/html
Content-Length: 3429
Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT
ETag: "60c1d6af-d65"
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/7.0)
Accept-Ranges: bytes
Connection: keep-aliveЕсли заголовка X-Varnish нет, значит запрос не прошёл через Varnish — проверьте настройки сети и правила брандмауэра.
Мини-методология развертывания (шаги)
- Скопируйте конфигурацию на тестовый сервер или VM.
- Отключите модули varnish, подключите репозитории и установите пакеты.
- Подготовьте default.vcl для вашего приложения (правила кеширования).
- Переключите Varnish на порт 80 и Nginx на 8080.
- Протестируйте с помощью curl и инструментов нагрузочного тестирования.
- Мониторьте метрики и логирование (varnishlog, varnishstat).
- Постепенно переводите трафик с балансировщика на новый стек.
Контрольный список для ролей
Системный администратор:
- Убедился в наличии резервных копий конфигов.
- Настроил systemd unit и перезапустил сервисы.
- Проверил порты и SELinux/фаервол.
Разработчик / DevOps:
- Настроил правила кеширования в default.vcl.
- Протестировал, что динамический контент не кешируется неправильно.
QA / тестировщик:
- Провёл функциональные тесты и проверил заголовки HTTP.
- Выполнил smoke-тесты после переключения трафика.
Когда Varnish не подходит
- Если у вас много персонализированного контента, который нельзя кэшировать.
- Если приложение использует сложную аутентификацию и динамические токены в заголовках.
- Если ваш стек полностью HTTP/2-only на входе и хотите TLS termination в Varnish (Varnish не поддерживает TLS на входе из коробки).
Важно: для TLS терминации используйте дополнительный слой (например, Nginx или Hitch) перед Varnish.
Альтернативы и доп. варианты
- Squid — старый HTTP-кеш, подходит для специфичных задач.
- Nginx с proxy_cache — встроенный кэш уровня веб-сервера.
- CDN (Cloudflare, Fastly) — вынести кэширование на периметр сети.
Выбор зависит от требований к управлению, масштабируемости и наличию TLS-терминации.
Фактбокс: ключевые параметры из примера
- Версия Varnish: 7.0.2
- Порты: исходно 6081, переводим Varnish на 80 и Nginx на 8080
- Пример выделения памяти: -s malloc,2g (можно менять)
- Инструменты проверки: curl, ss, systemctl, rpm
Критерии приёмки
- Varnish отвечает на HTTP-запросы и в ответе присутствует X-Varnish.
- Nginx слушает на 8080 и корректно отдаёт бэкенд-ответы при обходе Varnish.
- Нет ошибок в systemd journal для varnish и nginx после перезапуска.
Отладка и распространённые ошибки
- Проверьте, не занят ли порт 80 другим процессом.
- Отключите SELinux или настройте разрешения, если Varnish не может читать конфиг.
- Убедитесь, что firewall (firewalld/iptables) разрешает нужные порты.
- Используйте varnishlog и varnishstat для анализа кеш-хитов и ошибочных запросов.
Заключение
Поздравляем — вы установили Varnish 7 перед Nginx на Rocky Linux 8. После внедрения следите за метриками и корректируйте правила кеширования в default.vcl. Если нужно, помогу составить пример default.vcl под ваше приложение.
Важно: перед переводом продакшн-трафика протестируйте конфигурацию на стенде и подготовьте план отката.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента