Установка Varnish как обратного прокси для Apache на CentOS 7
Кратко
Varnish — быстрый HTTP-акселератор, который можно использовать как обратный прокси перед Apache, чтобы разгрузить веб-сервер и ускорить отдачу кэша. В этом руководстве показано пошагово: установка Apache на порту 8080, настройка Varnish на порту 80, открытие портов в firewalld и базовое тестирование.
Что мы сделаем
- Установим Apache на CentOS 7
- Переведём Apache на порт 8080
- Установим Varnish из репозитория EPEL
- Настроим Varnish как обратный прокси для Apache
- Настроим firewalld (HTTP/HTTPS)
- Протестируем конфигурацию и проверим логи
Кому полезно
- Системным администраторам и инженерам DevOps, которые хотят ускорить статический и динамический контент
- Веб-разработчикам, внедряющим слой кэша перед существующим Apache
Требования
- Сервер с CentOS 7
- root-права или sudo
Шаг 1 — Установка и запуск Apache на CentOS 7
Установим Apache (httpd) из репозиториев CentOS 7:
yum -y install httpdЗапустите сервис и включите автозапуск:
systemctl start httpd
systemctl enable httpdПроверьте, что служба работает, с помощью netstat или curl:
netstat -plntu
curl -I localhost
Apache установлен и запущен по умолчанию на порту 80.
Шаг 2 — Перевод Apache на порт 8080
Отредактируйте основной файл конфигурации Apache:
cd /etc/httpd/
vim conf/httpd.confНайдите строку Listen и измените порт на 8080:
Listen 8080Сохраните файл. Проверьте конфигурацию и перезапустите сервис:
apachectl configtest
systemctl restart httpdУбедитесь, что Apache слушает порт 8080:
netstat -plntu
Если порт 8080 занят, найдите и остановите процесс или выберите другой свободный порт.
Шаг 3 — Установка Varnish на CentOS 7
Varnish доступен через репозиторий EPEL. Сначала установим epel-release:
yum -y install epel-releaseЗатем установим Varnish:
yum -y install varnishЗапустите Varnish и включите автозапуск:
systemctl start varnish
systemctl enable varnishПо умолчанию Varnish слушает 6081 (HTTP) и 6082 (админ-интерфейс). Проверьте:
netstat -plntu
Шаг 4 — Настройка Varnish как обратного прокси для Apache
Отредактируйте Varnish VCL (default.vcl):
cd /etc/varnish
vim default.vclОпределите backend, указывающий на локальный Apache на порту 8080:
backend default {
.host = "127.0.0.1";
.port = "8080";
}Сохраните файл.
Далее укажем Varnish слушать HTTP-порт 80. Отредактируйте файл параметров:
vim varnish.paramsНайдите и измените:
VARNISH_LISTEN_PORT=80Перезапустите сервис и проверьте:
systemctl restart varnish
netstat -plntu
После перезапуска Varnish должен принимать запросы на порту 80 и проксировать их на Apache:8080.

Важно: если на сервере уже запущен другой процесс на порту 80 (например, ранее Apache), остановите его или перенесите на другой порт.
Шаг 5 — Настройка firewalld
Установим и включим firewalld (если он нужен в вашей инфраструктуре):
yum -y install firewalld
systemctl start firewalld
systemctl enable firewalldОткройте службы HTTP и HTTPS:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Если используется сетевой брандмауэр вне ОС (облачный security group), откройте порты там.
Шаг 6 — Тестирование
Проверка через curl:
curl -I hakase-labs.coВ ответе ожидается заголовок, подтверждающий работу Varnish (например, X-Varnish или Via). Пример вывода можно увидеть на скриншоте:

Откройте в браузере:
http://hakase-labs.co
Примечание: при ошибке 403 создайте index.html в /var/www/html:
cd /var/www/html/
echo ' Varnish- Apache - hakase-labs
' > index.htmlДля просмотра логов Varnish используйте:
varnishncsaЭто выведет access-логи Varnish в формате похожем на Apache/NCSA.
Принципы и ментальные модели
- Varnish находится между клиентом и сервером (reverse proxy). Он кеширует ответы и отдаёт их без обращения к Apache, если кеш валиден.
- Кеширование эффективно для статического контента и для динамического контента, который можно безопасно кешировать по заголовкам.
- Не все ответы можно кешировать: персонализированный или защищённый контент часто требует пропуска (pass) к исходному серверу.
Правило большого пальца: если ответ одинаков для большинства пользователей и не содержит чувствительных данных — его можно кешировать.
Когда это не подходит
- Контент строго персонализирован под каждого пользователя (авторизация, сессии). В таких случаях Varnish надо настраивать на пропуск (pass) или использовать кеширование по ключам аккуратно.
- Если у вас небольшая нагрузка и высокий уровень динамики при низком бюджете — добавление дополнительного слоя усложнит архитектуру без ощутимой выгоды.
Альтернативы и сравнение
- Nginx (как reverse proxy и HTTP-кэш) — проще для некоторых конфигураций, встроен в многие дистрибутивы.
- HAProxy — сильнее в TCP/SSL-терминации и балансировке нагрузки, не фокусируется на HTTP-кэше.
- CDN (Cloudflare, Fastly и т.д.) — внешнее кэширование ближе к пользователю; хорошо дополняет Varnish или заменяет его для глобального распределения.
Короткая подсказка: выбирайте Varnish, если нужна тонкая настройка HTTP-кэша и высокая пропускная способность на уровне приложения.
Ролям: чек-листы
Системный администратор:
- Установить и запустить httpd
- Перенести Apache на 8080
- Установить Varnish и изменить VARNISH_LISTEN_PORT
- Открыть порты в firewalld / security group
- Настроить ротацию логов и мониторинг (systemd, alert)
DevOps инженер:
- Написать VCL для правил кеширования
- Настроить health checks для backend
- Настроить CI/CD для деплоя конфигураций Varnish
Разработчик:
- Добавить корректные Cache-Control заголовки
- Исключить персональные ответы из кеша
Плейбук: быстрый откат (rollback)
- Если после включения Varnish появляются ошибки 5xx или 4xx, приостановите Varnish: systemctl stop varnish
- Временно верните Apache на порт 80 (в httpd.conf выставьте Listen 80) и перезапустите: systemctl restart httpd
- Верните правило firewall, если меняли, и проверьте доступность сайта
- Просмотрите логи Varnish и Apache, чтобы найти причину ошибки
Критерии приёмки
- Запросы на порт 80 обслуживаются процессом varnishd
- При повторных запросах к статическим объектам виден прирост hit в varnishncsa / varnishstat
- Веб-страница корректно открывается в браузере без ошибок
- Логи и мониторинг не показывают устойчивых ошибок 5xx
Отладка — распространённые симптомы и решения
- 403 Forbidden: проверьте разрешения /var/www/html и наличие index.html, SELinux-контекст (/sbin/restorecon -Rv /var/www/html)
- 503 Service Unavailable: проверьте backend в default.vcl и доступность Apache: curl -I http://127.0.0.1:8080
- Нет заголовков Varnish: убедитесь, что запрос проходит через порт 80 и VARNISH_LISTEN_PORT=80 выставлен правильно
Полезные команды для диагностики:
systemctl status varnish
journalctl -u varnish -e
varnishlog
varnishncsa
varnishstat
tcpdump -i any tcp port 80Фактические данные (ключевые числа)
- Порт Apache по умолчанию: 80 (в примере перенастроен на 8080)
- Порты Varnish по умолчанию: 6081 (HTTP), 6082 (админ)
- Varnish слушает: порт 80 после изменения VARNISH_LISTEN_PORT
Полезные подсказки и лучшие практики
- Дефолтная VCL хороша для старта. Перечитайте и пропишите правила для заголовков Cache-Control и Vary.
- Включите health checks для бэкенда и настраивайте grace/saint режимы для плавного поведения при проблемах с backend.
- Настройте мониторинг hit/miss и алерты на рост пропуска (pass) и ошибок.
Итог
Varnish — мощный инструмент для ускорения отдачи HTTP-контента. В связке с Apache он позволяет разгрузить веб-сервер и повысить отзывчивость сайта при высокой нагрузке. В статье показана базовая конфигурация на CentOS 7: перенос Apache на порт 8080, установка и настройка Varnish на 80, открытие портов и базовое тестирование.
Важно: прежде чем вводить в продакшен, протестируйте правила кэширования и убедитесь, что персональные или защищённые данные не попадают в общий кеш.
Справочные материалы
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента