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

Varnish как обратный прокси для Nginx на Ubuntu 16.04

• 6 min read • DevOps • Обновлено 19 Nov 2025
Varnish + Nginx на Ubuntu 16.04
Varnish + Nginx на Ubuntu 16.04

Введение

Varnish — это специализированный HTTP‑кеш-прокси (HTTP accelerator), часто используемый как обратный прокси перед веб‑сервером (Apache, Nginx). Он экономит ресурсы сервера и ускоряет отдачу контента за счёт кеширования ответов. В этом руководстве показано, как установить и настроить Varnish в связке с Nginx на Ubuntu 16.04.

Кратко: Nginx будет работать на порту 8080, Varnish будет принимать входящие запросы на порту 80 и проксировать их на Nginx.

Важно: приведённые команды выполняйте от root или с sudo, тестируйте на стенде прежде чем применять в продакшне.

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

  1. Установим Nginx на Ubuntu 16.04
  2. Перенастроим Nginx на порт 8080
  3. Установим Varnish (версия из репозитория — v4)
  4. Настроим Varnish как обратный прокси для Nginx
  5. Настроим UFW (файрвол)
  6. Протестируем и проверим логи

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

  • Сервер с Ubuntu 16.04
  • Права root или доступ через sudo
  • Доступ к терминалу и базовые знания системного администрирования

Шаг 1 — Установка Nginx на Ubuntu 16.04

Установите Nginx из официального репозитория Ubuntu:

sudo apt install nginx -y

Запустите сервис и включите автозапуск:

systemctl start nginx
systemctl enable nginx

Проверьте, что Nginx слушает стандартный HTTP‑порт:

netstat -plntu

Запуск веб-сервера Nginx — вывод netstat и systemctl

Шаг 2 — Перенастройка Nginx на порт 8080

Откройте файл виртуального хоста в каталоге sites-available. По умолчанию это файл default:

cd /etc/nginx/
vim sites-available/default

Найдите строки listen и измените порты на 8080:

        listen 8080 default_server;
        listen [::]:8080 default_server;

Сохраните файл, проверьте конфигурацию и перезапустите Nginx:

nginx -t
systemctl restart nginx

Убедитесь через netstat, что Nginx теперь слушает 0.0.0.0:8080:

netstat -plntu

Конфигурация nginx для прослушивания на порту 8080

Примечание: если у вас настроен SELinux или AppArmor — проверьте профили безопасности, они могут блокировать нестандартные порты.

Шаг 3 — Установка Varnish на Ubuntu 16.04

Установите Varnish из репозитория Ubuntu (в данном руководстве используется версия v4 из репо):

sudo apt install varnish -y

Запустите и включите автозапуск:

systemctl start varnish
systemctl enable varnish

По умолчанию Varnish слушает на портах 6081 (HTTP) и 6082 (админка). Проверьте это через netstat:

netstat -plntu

Запуск и проверка Varnish — вывод netstat для портов 6081/6082

Varnish установлен и работает.

Шаг 4 — Настройка Varnish как обратного прокси для Nginx

  1. Определите бэкенд в файле конфигурации VCL:
cd /etc/varnish
vim default.vcl

Найдите или добавьте блок backend и укажите Nginx как бэкенд:

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

Сохраните и выходите.

Важно: .host указывает IP бэкенда, .port — порт, на котором работает реальный сервер.

Конфигурация Varnish как обратного прокси — блок backend

  1. Переключите Varnish на прослушивание порта 80. Отредактируйте файл /etc/default/varnish и поменяйте DAEMON_OPTS, заменив :6081 на :80:
cd /etc/default/
vim varnish

Измените строку DAEMON_OPTS примерно так:

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"
  1. Обновите systemd unit, если это требуется, чтобы ExecStart отражал порт 80:
cd /lib/systemd/system
vim varnish.service

Найдите строку ExecStart и укажите -a :80:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
  1. Перезагрузите systemd и перезапустите Varnish:
systemctl daemon-reload
systemctl restart varnish

Проверьте netstat — Varnish должен слушать на порту 80:

netstat -plntu

Перезагрузка Varnish и проверка порта 80

Если Varnish слушает порт 80 и бэкенд доступен, то проксирование настроено.

Шаг 5 — Настройка файрвола UFW

Установите UFW, если он отсутствует:

sudo apt install ufw

Разрешите доступ по SSH, HTTP и HTTPS и включите файрвол:

ufw allow ssh
ufw allow http
ufw allow https
ufw enable

Подтвердите включение, нажав y.

Настройка UFW — подтверждение и правила

Важно: прежде чем включать UFW, убедитесь, что правило SSH корректно, чтобы не заблокировать доступ по SSH.

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

  1. Тест с помощью curl, чтобы увидеть заголовки и проверить наличие Via: Varnish:
curl -I example.com

В заголовках вы должны увидеть строку вида “Via: 1.1 varnish‑v4” или похожую.

Проверка соединения с помощью curl — заголовки, включающие Via: varnish

  1. Откройте сайт в браузере: http://your-domain.example или IP. Вы должны увидеть страницу, отдаваемую Nginx, но через Varnish.

Тест в браузере — страница по умолчанию Nginx загружается через Varnish

  1. Просмотр логов доступа Varnish:
varnishncsa

Эта утилита покажет стандартные записи access log, похожие на Apache/Nginx, но с данными о кешировании.

Отладка и типичные проблемы

  • Varnish не стартует на порту 80: проверьте, что Nginx не слушает 0.0.0.0:80. Если Nginx всё ещё на 80, переключите его на 8080 и перезапустите.
  • Пустые ответы или 503: проверьте доступность бэкенда (curl http://127.0.0.1:8080) и логи Varnish (/var/log/varnish/).
  • Заголовок Via отсутствует: возможно, кешированное содержимое обходит Varnish или вы опрашиваете напрямую Nginx.
  • Админка Varnish (6082) открыта из сети: ограничьте доступ через firewall или слушайте только на localhost.

Рекомендации по производительности и настройке

  • Память: параметр -s malloc,256m в примере выделяет 256 МБ для кеша. Правило‑эмпирика: выделите 25–75% свободной оперативной памяти, в зависимости от нагрузки и других сервисов.
  • TTL и политика кеширования задаются в VCL (например, vcl_recv, vcl_backend_response). По умолчанию Varnish кеширует ответы с заголовками Cache‑Control.
  • Для динамического контента используйте правильные Vary/Cache-Control заголовки и правила сброса (ban, purge).
  • Мониторинг: используйте varnishstat для метрик, varnishncsa — для логов, varnishlog — для детального трассинга запросов.

Безопасность и эксплуатация

  • Закройте порт админки Varnish (6082) от внешнего доступа: оставьте только localhost или используйте firewall.
  • Ограничьте доступ к серверу (SSH через ключи, UFW, Fail2Ban).
  • Следите за размерами кеша и количеством банов/пуржей — они могут создавать нагрузку на бэкенд.

Критерии приёмки

  • Nginx слушает порт 8080 и отдает страницу по локальному запросу.
  • Varnish слушает порт 80 и проксирует запросы на 127.0.0.1:8080.
  • При запросе через Varnish в заголовках ответа присутствует информация о Varnish (например, Via).
  • varnishncsa/varnishlog показывают записи и нет критических ошибок при старте.

Чек-лист ролей

  • Администратор сервера:
    • Установить Nginx и Varnish.
    • Обеспечить SSH‑доступ и резервный план отката.
  • DevOps/Инженер CI/CD:
    • Включить мониторинг (varnishstat) и оповещения на рост ошибок.
    • Настроить автоматические перезапуски/профилирование при перегрузках.
  • Разработчик веб‑приложения:
    • Проверить заголовки Cache‑Control/Set‑Cookie.
    • Обеспечить правильную политику кеширования для динамических страниц.

План отката (Runbook/Rollback)

  1. Если Varnish вызывает ошибки, временно перенаправьте HTTP‑трафик на Nginx: в systemd верните Varnish на порт 6081 и в файрволе откройте 6081, либо измените конфигурацию nginx на порт 80 и перезапустите nginx.
  2. Перезапустите Varnish и проверьте логи: systemctl restart varnish; journalctl -u varnish -b.
  3. Если нужно вернуть исходные файлы конфигурации, используйте резервные копии /etc/varnish/default.vcl и /etc/default/varnish.

Краткая методология внедрения (минимальный SOP)

  1. Подготовка стенда: резервная копия, текущие конфиги.
  2. Установка Nginx и его переключение на 8080.
  3. Установка Varnish, настройка backend на 127.0.0.1:8080.
  4. Переключение Varnish на порт 80 и тестирование.
  5. Настройка файрвола и мониторинга.
  6. Постепенный перевод трафика (канареечный релиз) и наблюдение метрик.

Краткий словарь (1‑строчное определение)

  • Varnish: HTTP‑кеширующий прокси, ускоряющий отдачу статического контента.
  • Backend: реальный сервер, который обрабатывает запросы (в нашем случае Nginx).
  • VCL: язык конфигурации Varnish (Varnish Configuration Language).

Шпаргалка команд (cheat sheet)

  • Установка: sudo apt install varnish nginx
  • Проверка портов: netstat -plntu
  • Проверка конфигурации Nginx: nginx -t
  • Перезапуск сервисов: systemctl restart nginx|varnish
  • Логи Varnish: varnishncsa, varnishlog, varnishstat
  • Админка Varnish: доступна на localhost:6082 (ограничьте доступ)

Когда использовать альтернативы

  • Если вам нужен кеширование на уровне приложения с гибкими правилами — рассмотрите встроенный кеш Nginx или кеш‑механизмы в приложении.
  • Если вам нужна геораспределённая сеть доставки контента — используйте CDN.
  • Если вы предпочитаете простоту и интеграцию с модульной архитектурой Nginx — рассмотрите Nginx Plus или использование proxy_cache.

Заключение

Настройка Varnish в качестве обратного прокси для Nginx позволяет снизить нагрузку на бэкенд и ускорить отдачу контента за счёт кеширования. В этом руководстве показаны базовые шаги: установка, конфигурация портов, проверка и базовая отладка. Для продакшн‑внедрения дополнительно настройте политику кеширования в VCL, мониторинг и безопасную конфигурацию административного интерфейса.

Краткое резюме:

  • Установите Nginx и Varnish.
  • Переключите Nginx на порт 8080.
  • Настройте Varnish backend на 127.0.0.1:8080 и переключите Varnish на порт 80.
  • Настройте файрвол, проверьте работу curl, просмотрите логи.

Источники и полезная документация:

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