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

Установка Varnish как обратного прокси для Apache на CentOS 7

• 5 min read • DevOps • Обновлено 25 Nov 2025
Varnish как обратный прокси для Apache на CentOS 7
Varnish как обратный прокси для Apache на CentOS 7

Кратко

Varnish — быстрый HTTP-акселератор, который можно использовать как обратный прокси перед Apache, чтобы разгрузить веб-сервер и ускорить отдачу кэша. В этом руководстве показано пошагово: установка Apache на порту 8080, настройка Varnish на порту 80, открытие портов в firewalld и базовое тестирование.

Что мы сделаем

  1. Установим Apache на CentOS 7
  2. Переведём Apache на порт 8080
  3. Установим Varnish из репозитория EPEL
  4. Настроим Varnish как обратный прокси для Apache
  5. Настроим firewalld (HTTP/HTTPS)
  6. Протестируем конфигурацию и проверим логи

Кому полезно

  • Системным администраторам и инженерам 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 HTTP-сервера

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

Проверка Apache на порту 8080

Если порт 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

Установка и проверка Varnish

Шаг 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

После перезапуска Varnish должен принимать запросы на порту 80 и проксировать их на Apache:8080.

Проверка Varnish на порту 80

Важно: если на сервере уже запущен другой процесс на порту 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

Настройка firewalld — открытие портов

Если используется сетевой брандмауэр вне ОС (облачный security group), откройте порты там.

Шаг 6 — Тестирование

Проверка через curl:

curl -I hakase-labs.co

В ответе ожидается заголовок, подтверждающий работу Varnish (например, X-Varnish или Via). Пример вывода можно увидеть на скриншоте:

Тестирование Varnish — заголовки HTTP

Откройте в браузере:

http://hakase-labs.co

Страница теста Varnish

Примечание: при ошибке 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)

  1. Если после включения Varnish появляются ошибки 5xx или 4xx, приостановите Varnish: systemctl stop varnish
  2. Временно верните Apache на порт 80 (в httpd.conf выставьте Listen 80) и перезапустите: systemctl restart httpd
  3. Верните правило firewall, если меняли, и проверьте доступность сайта
  4. Просмотрите логи 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, открытие портов и базовое тестирование.

Важно: прежде чем вводить в продакшен, протестируйте правила кэширования и убедитесь, что персональные или защищённые данные не попадают в общий кеш.

Справочные материалы

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