Поиск по сайту:

Как включить HTTPS для Varnish Cache с помощью Hitch в CentOS-RHEL 8


В Varnish Cache отсутствует встроенная поддержка SSL/TLS и других протоколов, связанных с портом 443. Если вы используете Varnish Cache для повышения производительности вашего веб-приложения, вам необходимо установить и настроить еще одну часть программного обеспечения, называемую прокси-сервером завершения SSL/TLS, для работы вместе с Varnish Cache, чтобы включить HTTPS.

Hitch — это бесплатный масштабируемый SSL/TLS-прокси с открытым исходным кодом на основе libev, разработанный для Varnish Cache, который в настоящее время работает в Linux, OpenBSD, FreeBSD и MacOSX. Однако он завершает соединения TLS/SSL, прослушивая порт 443 (порт по умолчанию для HTTPS) и перенаправляет незашифрованный трафик в Varnish Cache. , он должен работать и с другими бэкэндами.

Он поддерживает TLS1.2 и TLS1.3, а также устаревшие TLS 1.0/1.1, поддерживает ALPN (Согласование протокола уровня приложения) и NPN (Следующее согласование протокола) для HTTP/2, протокола PROXY для сигнализации клиенту IP/порт к серверной части, подключения сокета домена UNIX к источнику, SNI (Индикация имени сервера), с подстановочными сертификатами и без них. Кроме того, он хорошо работает для крупных установок, требующих до 15 000 сокетов прослушивания и 500 000 сертификатов.

В продолжение двух предыдущих статей об установке Varnish Cache для HTTP-серверов Nginx и Apache в этом руководстве показано, как включить HTTPS< для Varnish Cache с использованием Hitch TLS Proxy в CentOS/RHEL 8.

В этом руководстве предполагается, что вы установили Varnish для веб-сервера Nginx или Apache, в противном случае см.:

  • Как установить Varnish Cache 6 для веб-сервера Nginx на CentOS/RHEL 8
  • Как установить Varnish Cache 6 для веб-сервера Apache на CentOS/RHEL 8

Шаг 1. Установите Hitch на CentOS/RHEL 8.

1. Пакет Hitch предоставляется в репозитории EPEL (Дополнительные пакеты для Enterprise Linux). Чтобы установить его, сначала включите EPEL в своей системе, а затем установите пакет. Если у вас не установлен пакет OpenSSL, установите его.

dnf install epel-release
dnf install hitch openssl

2. Когда установка пакета будет завершена, вам нужно будет настроить Varnish Cache для работы Hitch. Вам также необходимо настроить Hitch на использование сертификатов SSL/TLS и Varnish в качестве серверной части. Основной файл конфигурации Hitch находится по адресу /etc/hitch/hitch.conf, который описан ниже.

Шаг 2. Настройка Varnish Cache для Hitch

3. Затем включите Varnish для прослушивания дополнительного порта (в нашем случае 8443) с использованием протокола PROXY. поддержка для связи с Hitch.

Итак, откройте служебный файл Varnish systemd для редактирования.

systemctl edit --full varnish

Найдите строку ExecStart и добавьте дополнительный флаг -a со значением 127.0.0.1:8443,proxy. Использование значения 127.0.0.1:8443 означает, что Varnish будет принимать только внутреннее соединение (от процессов, запущенных на том же сервере, т.е. в данном случае заминку), но не внешние соединения.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Сохраните файл, а затем перезапустите службу Varnish, чтобы применить последние изменения.

systemctl restart varnish

Шаг 3. Получение сертификатов SSL/TLS

4. В этом разделе мы объясним, как создать пакет сертификатов SSL/TLS, который будет использоваться в Hitch. В этом руководстве мы объясним различные варианты использования самозаверяющего сертификата, коммерческого сертификата или сертификата от Let’s Encrypt.

Чтобы создать самозаверяющий сертификат (который следует использовать только в локальной среде тестирования), вы можете использовать инструмент OpenSSL.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Затем создайте пакет сертификата и ключа следующим образом.

cat tecmint.crt tecmint.key >tecmint.pem

Примечание. Для производственного использования вы можете купить сертификат в коммерческом центре сертификации (CA) или получите бесплатный, автоматизированный и полностью распознаваемый сертификат от Let's Encrypt. Затем создайте пакет PEM.

Если вы купили сертификат в коммерческом CA, вам необходимо объединить закрытый ключ, сертификат и пакет CA, как показано.

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Для Let's Encrypt сертификат, закрытый ключ и полная цепочка будут храниться в /etc/letsencrypt/live/example.com/, поэтому создайте пакет, как показано. .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Шаг 4: Настройка и запуск сцепки

5. Затем настройте Varnish в качестве серверной части для Hitch и укажите файлы сертификатов SSL/TLS, которые будут использоваться для HTTPS в основном файле конфигурации Hitch откройте его для редактирования.

vi /etc/hitch/hitch.conf

Раздел интерфейс определяет IP-адреса и порт, которые будет прослушивать Hitch. Конфигурация по умолчанию — прослушивание всех интерфейсов IPv4 и IPv6, подключенных к серверу и работающих через порт 443, и обработка входящих HTTPS< запросы, передавая их Varnish.

Измените порт прокси-сервера внутренней по умолчанию с 6086 на 8443 (порт, используемый для пересылки запросов в Varnish) в Файл конфигурации Hitch с использованием параметра backend. Также укажите файл сертификата, используя параметр pem-file, как показано.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Сохраните файл и закройте его.

6. Теперь запустите службу hitch и включите ее автоматический запуск при загрузке системы. Обратите внимание, что переключатель --now при использовании с включением также запускает службу systemd, а затем проверяет ее состояние, чтобы убедиться, что она запущена и работает, следующим образом.

systemctl enable --now hitch
systemctl status hitch

7. Прежде чем приступить к проверке, работает ли ваш веб-сайт/приложение по HTTPS, вам необходимо разрешить сервисный порт 443 HTTPS в брандмауэр, чтобы запросы, предназначенные для этого порта на сервере, проходили через брандмауэр.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Шаг 5. Тестирование завершения SSL/TLS с помощью настройки Varnish Cache-Hitch

8. Пришло время протестировать настройку Varnish Cache-Hitch. Откройте веб-браузер и используйте IP-адрес своего домена или сервера для навигации по HTTPS.

https://www.example.com
OR
https://SERVER_IP/

После загрузки индексной страницы вашего веб-приложения проверьте заголовки HTTP, чтобы убедиться, что контент обслуживается через Varnish Cache.

Для этого щелкните правой кнопкой мыши загруженную веб-страницу, выберите Проверить из списка опций, чтобы открыть инструменты разработчика. Затем нажмите вкладку Сеть и Обновите страницу, затем выберите запрос на просмотр заголовков HTTP, как показано на следующем снимке экрана.

Шаг 6. Перенаправление HTTP на HTTPS в Varnish Cache

9. Чтобы ваш веб-сайт работал только на HTTPS, вам необходимо перенаправить весь HTTP трафик на HTTPS. Вы можете сделать это, добавив следующую конфигурацию в файл конфигурации Hitch.

vi /etc/hitch/hitch.conf 

Сначала добавьте строку import std; чуть ниже vlc 4.0;, затем найдите подпрограмму vlc_recv, которая является первой подпрограммой VCL, выполняемой немедленно. после того, как Varnish Cache проанализировал клиентский запрос в его базовую структуру данных. Здесь мы можем изменить заголовки запросов и запустить синтезатор для перенаправления клиентских запросов.

Измените его, чтобы он выглядел так.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Обратите внимание, что протокол PROXY позволяет Varnish видеть порт прослушивания Hitch 443 из server.ip< /стронг> переменная. Таким образом, строка std.port(server.ip) возвращает номер порта, на котором было получено клиентское соединение.

Если порт не 443 для HTTPS (как проверено (std.port(server.ip) != 443)), подпрограмма установит заголовок местоположения HTTP запроса (set req.http.location) в безопасный запрос («https://» + req.http.host< + req.url), просто запрашивая веб-браузер загрузить HTTPS версию веб-страницы (т. е. перенаправление URL-адреса).

Заголовок Location будет отправлен в функцию vcl_synth (которая вызывается с помощью return(synth(301))) с кодом состояния HTTP 301 (Перемещено навсегда).

10. Затем добавьте следующую функцию vcl_synth (один из многих вариантов ее использования — перенаправление пользователей) для обработки приведенного выше синтезатора.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Он проверяет, равен ли статус ответа 301, заголовок HTTP Location в ответе установлен на заголовок HTTP Location в запросе, который на самом деле является перенаправлением на HTTPS, и выполняет действие доставки.

Действие доставки формирует ответ на основе ответа серверной части, сохраняет ответ в кеше и отправляет его клиенту.

Сохраните файл и закройте его.

11. Еще раз примените новые изменения в конфигурации Varnish, перезапустив службу. Затем с помощью инструмента командной строки Curl подтвердите перенаправление с HTTP на HTTPS.

systemctl restart varnish
curl -I http://eaxmple.com/

В браузере ответ также такой же, как показано на следующем снимке экрана.

Мы надеемся, что до этого момента все работало нормально. Если нет, оставьте комментарий или вопросы через форму обратной связи ниже. Дополнительные параметры конфигурации см. в документации Varnish Cache и документации Hitch.