Varnish как обратный прокси для Nginx на Ubuntu 16.04
Введение
Varnish — это специализированный HTTP‑кеш-прокси (HTTP accelerator), часто используемый как обратный прокси перед веб‑сервером (Apache, Nginx). Он экономит ресурсы сервера и ускоряет отдачу контента за счёт кеширования ответов. В этом руководстве показано, как установить и настроить Varnish в связке с Nginx на Ubuntu 16.04.
Кратко: Nginx будет работать на порту 8080, Varnish будет принимать входящие запросы на порту 80 и проксировать их на Nginx.
Важно: приведённые команды выполняйте от root или с sudo, тестируйте на стенде прежде чем применять в продакшне.
Что мы сделаем
- Установим Nginx на Ubuntu 16.04
- Перенастроим Nginx на порт 8080
- Установим Varnish (версия из репозитория — v4)
- Настроим Varnish как обратный прокси для Nginx
- Настроим UFW (файрвол)
- Протестируем и проверим логи
Предварительные требования
- Сервер с 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
Шаг 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
Примечание: если у вас настроен 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 установлен и работает.
Шаг 4 — Настройка Varnish как обратного прокси для Nginx
- Определите бэкенд в файле конфигурации VCL:
cd /etc/varnish
vim default.vclНайдите или добавьте блок backend и укажите Nginx как бэкенд:
backend default {
.host = "127.0.0.1";
.port = "8080";
}Сохраните и выходите.
Важно: .host указывает IP бэкенда, .port — порт, на котором работает реальный сервер.

- Переключите 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"- Обновите 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- Перезагрузите systemd и перезапустите Varnish:
systemctl daemon-reload
systemctl restart varnishПроверьте netstat — Varnish должен слушать на порту 80:
netstat -plntu
Если 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, убедитесь, что правило SSH корректно, чтобы не заблокировать доступ по SSH.
Шаг 6 — Тестирование
- Тест с помощью curl, чтобы увидеть заголовки и проверить наличие Via: Varnish:
curl -I example.comВ заголовках вы должны увидеть строку вида “Via: 1.1 varnish‑v4” или похожую.

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

- Просмотр логов доступа 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)
- Если Varnish вызывает ошибки, временно перенаправьте HTTP‑трафик на Nginx: в systemd верните Varnish на порт 6081 и в файрволе откройте 6081, либо измените конфигурацию nginx на порт 80 и перезапустите nginx.
- Перезапустите Varnish и проверьте логи: systemctl restart varnish; journalctl -u varnish -b.
- Если нужно вернуть исходные файлы конфигурации, используйте резервные копии /etc/varnish/default.vcl и /etc/default/varnish.
Краткая методология внедрения (минимальный SOP)
- Подготовка стенда: резервная копия, текущие конфиги.
- Установка Nginx и его переключение на 8080.
- Установка Varnish, настройка backend на 127.0.0.1:8080.
- Переключение Varnish на порт 80 и тестирование.
- Настройка файрвола и мониторинга.
- Постепенный перевод трафика (канареечный релиз) и наблюдение метрик.
Краткий словарь (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, просмотрите логи.
Источники и полезная документация:
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента