Кэш Varnish (обычно называемый Varnish) – это мощный и быстрый обратный прокси-ускоритель HTTP с современной архитектурой и гибким языком конфигурации. Обратный прокси просто означает, что это программное обеспечение, которое можно развернуть перед вашим веб-сервером (который является исходным сервером или бэкендом), таким как Nginx, чтобы принимать HTTP-запросы клиентов и пересылать их на исходный сервер для обработки. И он доставляет ответ от исходного сервера клиентам.
Varnish действует как посредник между Nginx и клиентами, но с некоторыми преимуществами в производительности. Его основная цель – ускорить загрузку ваших приложений, работая как кэширующий движок. Он принимает запросы от клиентов и пересылает их в бэкенд один раз для кэширования запрошенного контента (хранит файлы и фрагменты файлов в памяти). Затем все будущие запросы на точно такой же контент будут обслуживаться из кэша.
Это делает ваши веб-приложения загружаемыми быстрее и косвенно улучшает общую производительность вашего веб-сервера, потому что Varnish будет обслуживать контент из памяти, а не Nginx обрабатывает файлы с диска хранения.
Помимо кэширования, Varnish также имеет несколько других вариантов использования, включая маршрутизатор HTTP-запросов, балансировщик нагрузки, брандмауэр веб-приложений и многое другое.
Лак настраивается с использованием высокорасширяемого встроенного языка конфигурации Varnish Configuration Language (VCL), который позволяет вам писать политики о том, как должны обрабатываться входящие запросы. Вы можете использовать его для создания настраиваемых решений, правил и модулей.
В этой статье мы рассмотрим шаги по установке веб-сервера Nginx и кэша Varnish 6 на свежий сервер CentOS 8 или RHEL 8. Пользователи RHEL 8 должны убедиться, что включена подписка Red Hat.
Чтобы настроить полный стек LEMP вместо установки только веб-сервера Nginx, ознакомьтесь с следующими руководствами.
Шаг 1: Установка веб-сервера Nginx на CentOS/RHEL 8
1. CentOS/RHEL 8 поставляется с последней версией программного обеспечения веб-сервера Nginx, поэтому мы установим его из репозитория по умолчанию, используя следующие команды dnf.
# dnf update # dnf install nginx
2. После установки Nginx вам нужно запустить, включить и проверить статус, используя следующие команды systemctl.
# systemctl start nginx # systemctl enable nginx # systemctl status nginx

3. Если вас немного интересует, вы также можете проверить TCP-сокет Nginx, который работает по умолчанию на порту 80, используя следующую команду ss.
# ss -tpln

4. Если на системе работает брандмауэр, убедитесь, что обновили правила брандмауэра, чтобы разрешить запросы к веб-серверу.
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --reload
Шаг 2: Установка кэша Varnish 6 на CentOS/RHEL 8
5. CentOS/RHEL 8 предоставляет модуль Varnish Cache DNF по умолчанию, который содержит версию 6.0 LTS (долгосрочная поддержка).
Чтобы установить модуль, выполните следующую команду.
# dnf module install varnish

6. После завершения установки модуля вы можете подтвердить версию Varnish, установленную на вашей системе.
# varnishd -V

7. После установки Varnish Cache основная исполняемая команда устанавливается в /usr/sbin/varnishd, а файлы конфигурации varnish находятся в /etc/varnish/.
Файл /etc/varnish/default.vcl является основным файлом конфигурации varnish, написанным с использованием VCL, а /etc/varnish/secret – это секретный файл varnish.
8. Затем запустите службу Varnish, включите автозапуск во время загрузки системы и убедитесь, что она работает.
# systemctl start varnish # systemctl enable varnish # systemctl status varnish

Шаг 3: Настройка Nginx для работы с кэшем Varnish
9. В этом разделе мы покажем, как настроить Varnish Cache для работы перед Nginx. По умолчанию Nginx слушает порт 80, обычно каждый блок сервера (или виртуальный хост) настроен на прослушивание этого порта.
Например, посмотрите на блок сервера Nginx по умолчанию, настроенный в основном файле конфигурации (/etc/nginx/nginx.conf).
# vi /etc/nginx/nginx.conf
Ищите раздел блока сервера, как показано на следующем скриншоте.

10. Чтобы запустить Varnish перед Nginx, вы должны изменить порт по умолчанию Nginx с 80 на 8080 (или любой другой порт на ваш выбор).
Это необходимо сделать во всех будущих файлах конфигурации блока сервера (обычно созданных в каталоге /etc/nginx/conf.d/) для сайтов или веб-приложений, которые вы хотите обслуживать через Varnish.
Например, блок сервера для нашего тестового сайта tecmint.lan
находится в файле /etc/nginx/conf.d/tecmint.lan.conf и имеет следующую конфигурацию.
server { listen 8080; server_name www.tecmint.lan; root /var/www/html/tecmint.lan/; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }

Важно: Не забудьте отключить блок сервера по умолчанию, закомментировав его секцию конфигурации в файле /etc/nginx/nginx.conf, как показано на следующем скриншоте. Это позволяет вам начать работу с другими веб-сайтами/приложениями на вашем сервере, иначе Nginx всегда будет направлять запросы к блоку сервера по умолчанию.

11. После завершения настройки проверьте файл конфигурации на наличие ошибок и перезапустите службу Nginx, чтобы применить последние изменения.
# nginx -t # systemctl restart nginx

12. Затем, чтобы принимать HTTP-запросы от клиентов, нам нужно настроить Varnish для запуска на порту 80. В отличие от более ранних версий Varnish Cache, где эти изменения вносились в файл среды Varnish (который теперь устарел), в версии 6.0 и выше.
Нам нужно внести необходимое изменение в файл службы Varnish. Запустите следующую команду, чтобы открыть соответствующий файл службы для редактирования.
# systemctl edit --full varnish
Найдите следующую строку и измените значение переключателя -a
, который указывает адрес прослушивания и порт. Установите порт на 80, как показано на следующем скриншоте.
Обратите внимание, что если вы не указываете адрес, то varnishd будет слушать все доступные интерфейсы IPv4 и IPv6, активные на сервере.
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

Сохраните изменения в файле и выйдите.
13. Далее вам нужно определить сервер backend, который будет посещать Varnish, чтобы получить содержимое. Это делается в основном конфигурационном файле Varnish.
# vi /etc/varnish/default.vcl
Найдите раздел конфигурации backend по умолчанию и измените строку “default” на server1 (или любое другое имя, которое вы выберете для представления вашего исходного сервера). Затем установите порт на 8080 (или порт прослушивания Nginx, который вы определили в вашем блоке сервера).
backend server1 { .host = "127.0.0.1"; .port = "8080"; }

Для этого руководства мы запускаем Varnish и Nginx на одном и том же сервере. Если ваш веб-сервер Nginx запущен на другом хосте. Например, на другом сервере с адресом 10.42.0.247, то установите параметр .host
, как показано ниже.
backend server1 { .host = "10.42.0.247"; .port = "8080"; }
Сохраните файл и закройте его.
14. Затем вам нужно перезагрузить конфигурацию менеджера systemd из-за недавних изменений в файле службы Varnish, затем перезапустите службу Varnish, чтобы применить изменения следующим образом.
# systemctl daemon-reload # systemctl restart varnish
15. Теперь подтвердите, что Nginx и Varnish слушают на настроенных TCP сокетах.
# ss -tpln

Шаг 4: Проверка настройки кэша Nginx Varnish
16. Затем убедитесь, что веб-страницы обслуживаются через кэш Varnish, как показано ниже. Откройте веб-браузер и перейдите по IP-адресу сервера или FDQN, как показано на следующем скриншоте.
http://www.tecmin.lan OR http://10.42.0.144

17. В альтернативе используйте команду curl, как показано. Используйте IP-адрес вашего сервера или FQDN вашего веб-сайта или используйте 127.0.0.1 или localhost, если тестируете локально.
# curl -I http:///www.tecmint.lan

Полезные утилиты администрирования Varnish Cache
18. В этом завершающем разделе мы кратко опишем некоторые из полезных утилит, которые поставляются с Varnish Cache и которые вы можете использовать для управления varnishd, доступа к журналам в памяти и общей статистики и многого другого.
varnishadm
varnishadm – утилита для управления работающим экземпляром Varnish. Она устанавливает соединение CLI с varnishd. Например, вы можете использовать ее для вывода списка настроенных бекэндов, как показано на следующем скриншоте (для получения дополнительной информации читайте man varnishadm).
# varnishadm varnish> backend.list

varnishlog
– утилита varnishlog предоставляет доступ к данным, специфичным для запросов. Она предоставляет информацию о конкретных клиентах и запросах (для получения дополнительной информации читайте man varnishlog).
# varnishlog

varnishstat
A varnishstat also known as varnish statistics, which gives you a glance at Varnish’s current performance by providing access to in-memory statistics such as cache hits and misses, information about the storage, threads created, deleted objects (read man varnishstat for more information).
# varnishstat

varnishtop
A varnishtop utility reads the shared memory logs and presents a continuously updated list of the most commonly occurring log entries (read man varnishtop for more information).
# varnishtop

varnishhist
A varnishhist (varnish history) utility parses the varnish logs and outputs a continuously updated histogram showing the distribution of the last n requests by their processing (read man varnishhist for more information).
# varnishhist

В этом руководстве мы показали, как установить Varnish Cache и запустить его перед сервером Nginx HTTP, чтобы ускорить доставку веб-контента в CentOS/RHEL 8.
Любые мысли или вопросы по этому руководству можно оставить, используя форму обратной связи ниже. Для получения дополнительной информации ознакомьтесь с документацией Varnish Cache.
Основным недостатком Varnish Cache является отсутствие поддержки HTTPS. Чтобы включить HTTPS на вашем веб-сайте/приложении, вам необходимо настроить прокси-сервер завершения SSL/TLS для совместной работы с Varnish Cache для защиты вашего сайта. В нашей следующей статье мы покажем, как включить HTTPS для Varnish Cache с использованием Hitch на CentOS/RHEL 8.
Source:
https://www.tecmint.com/install-varnish-cache-for-nginx-on-centos-rhel-8/