Выполняем SSL-терминацию с помощью HAProxy для Ubuntu 14.04 | LeaderSSL

Поддержка LeaderSSL оффлайн. Режим работы: пн. - пт. с 9:00 до 19:00 (по московскому времени) без перерыва на обед.

Обработка заказов и выпуск сертификатов - круглосуточно.

У вас есть вопрос, у нас — ответ!

Выполняем SSL-терминацию с помощью HAProxy для Ubuntu 14.04

HAProxy – это программа, предназначенная для балансировки нагрузки для TCP/HTTP приложений. Она позволяет распределить входящие запросы по нескольким серверам. За основу программы взят язык C. HAProxy используют многие популярные сегодня сайты, такие как Twitter, Instagram, Tumblr и т.д.

В данной статье мы проведем пошаговую настройку HAProxy для перенаправления HTTP на HTTPS. Также мы рассмотрим вопросы терминации SSL и балансировки нагрузки для приложений. После выполненной настройки пользователи смогут легко переходить на ваш сайт, используя подключение к HAProxy через HTTPS. Сервер HAPRoxy проведет декодирование SSL-сессии, после чего перешлет запросы на порт 80 веб-серверов. Сформированный ответ вернется обратно к HAProxy, который выполнит кодирование и передаст ответ соответствующим пользователям.

Чтобы обслуживать контент, можно применять любое число веб-серверов. Однако с ростом трафика HAProxy может стать причиной снижения производительности, потому нужно всегда следить за выделенными ресурсами для его работы.

Итак, давайте перейдем непосредственно к настройке SSL-терминации на HAProxy. Мы будем работать с сервером Ubuntu 14.04. Для реализации задуманного нам понадобится как минимум один сервер с приватной сетью с открытым портом 80, VPS с root-доступом для инсталляции HAProxy, а также SSL-сертификат. Если у вас нет SSL-сертификата, вы всегда можете приобрести его по следующей ссылке.

Шаг 1. Перевод файлов сертификата в формат PEM.

Первый шаг для настройки SSL-терминации на HAProxy – это перевод ключа и SSL-сертификата в формат PEM. Обычно для этого достаточно просто объединить ключ в формате .key и файлы самого SSL-сертификата в формате .crt (или .cer). Чтобы объединить файлы, можно воспользоваться командой:

cat primer.com.crt primer.com.key > primer.com.pem

sudo cp primer.com.pem /etc/ssl/private/  

В итоге вы получите PEM-файл, который будет включать в себя ключ, а также SSL-сертификат. Найти файл можно будет в каталоге /etc/ssl/private. Файл будет носить название primer.com.pem.

В некоторых случаях для обеспечения работы SSL-сертификата в файл PEM также необходимо добавить корневой сертификат и все промежуточные сертификаты соответствующего центра сертификации. Эти файлы доступны для бесплатной загрузки на официальных сайтах удостоверяющих центров.

Шаг 2. Инсталляция HAProxy 1.6.x.

Установка HAProxy на наш VPS происходит следующим образом.

Добавляем на сервер архив PPA:

sudo add-apt-repository ppa:vbernat/haproxy-1.6

Обновляем индекс пакетов:

sudo apt-get update

Далее производим установку HAProxy 1.6:

sudo apt-get install haproxy

Шаг 3. Конфигурирование HAProxy.

Конфиг HAProxy хранится по адресу /etc/haproxy/haproxy.cfg. В нем есть два раздела: global, включающий в себя разнообразные глобальные настройки, а также proxies, включающий в себя группы defaults, listen, frontend и backend.

Начнем с задания глобальных настроек. Все настройки должны производиться на VPS.

Открываем конфигурационный файл haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

В файле имеется несколько групп: global, а также defaults.

Для начала давайте установим значение maxconn. Этот параметр задает максимальное количество одновременных подключений, которое может обслуживать HAProxy. Путем задания этого параметра можно избежать чрезмерного расхода серверных ресурсов. Подбирается данный параметр индивидуально в зависимости от сервера. Пример:

maxconn 2048

Максимальный размер создаваемых временных DHE ключей устанавливается путем команды:

tune.ssl.default-dh-param 2048

Теперь мы можем перейти к группе defaults и указать:

option forwardfor

option http-server-close

Что мы сделали в данном случае? Мы задали опцию forwardfor, которая отвечает за поддержку запросов X-Forwarded-For. Вторая опция, http-server-close, позволяет снизить задержку между HAProxy и клиентом.

Далее идут настройки статистики. Для включения статистики достаточно добавить в раздел defaults следующее:

stats enable

stats uri /stats

stats realm Haproxy\ Statistics

stats auth username:password

Вместо значений username и password необходимо указать свой логин/пароль.

Задав данные опции, вы сможете отслеживать статистику HAProxy. Для этого достаточно к домену добавить «/stats». Пример: https://domen.com/stats.

Шаг 4. Настройка прокси-сервера.

Теперь мы переходим к самому важному этапу – настройке прокси. Первое, что мы сделаем – это добавим фронтэнд для управления HTTP-подключениями. Реализуется это следующим образом:

frontend www-http

bind hp_pbl_IP:80

reqadd X-Forwarded-Proto:\ http

default_backend www-backend

Эти строки необходимо добавить в самый конец файла haproxy.cfg. Вместо hp_pbl_IP укажите внешний IP сервера.

Что означает каждая из этих строк?

  • Первая строка – здесь мы указали, что фронтэнд будет называться www-http.
  • Вторая строка – обработка входящего трафика будет осуществляться на порту 80 (это стандартный порт для HTTP).
  • Третья строка – в конец HTTP-запроса добавляется заголовок HTTP
  • Четвертая строка – весь входящий трафик будет перенаправляться на www-backend.

Теперь нам нужно добавить фронтэнд для управления входящими соединениями HTTPS. Делается это следующим образом:

frontend www-https

bind hp_pbl_IP:443 ssl crt /etc/ssl/private/primer.com.pem

reqadd X-Forwarded-Proto:\ https

default_backend www-backend

Этот код нужно добавить в самый конец файла haproxy.cfg. Вместо hp_pbl_IP укажите внешний IP сервера.

Что означает каждая из этих строк?

  • Первая строка - здесь мы указали, что фронтэнд будет называться www-https.
  • Вторая строка – задаем порт, где будет обрабатываться входящий HTTPS-трафик (по умолчанию 443). Вместо primer.com.pem укажите название pem-файла с файлами сертификата и ключом.
  • Третья строка – в конец HTTP-запроса добавляется заголовок HTTP.
  • Четвертая строка – весь входящий трафик перенаправляется на www-backend.

С фронтэндом закончили. Теперь давайте перейдем к бэкэнду.

Настройка бэкэнда производится путем добавления следующих строк в самый конец файла haproxy.cfg:

backend www-backend

redirect scheme https if !{ ssl_fc }

server www-1 vn1_pr_IP:80 check

server www-2 vn2_pr_IP:80 check

Здесь необходимо вместо vn1_pr_IP и vn2_pr_IP указать внутренние IP-адреса веб-серверов.

Что означает каждая из этих строк?

  • Первая строка – задаем название бэкэнда
  • Вторая строка – устанавливаем перенаправление HTTP запросов на HTTPS. В итоге сайт будет открываться только по HTTPS. Для поддержки HTTP необходимо будет удалить эту строку из конфигурационного файла.
  • Третья строка – задаем внутренний IP-адрес сервера www-1, а также порт. Опция check позволяет регулярно выполнять проверку работоспособности сервера.
  • Четвертая строка – аналогична третьей, только для сервера www-2.

Вы всегда можете добавить больше серверов, задав соответствующие строки в конфигурационном файле.

Сохраняем haproxy.cfg, после чего закрываем его и переходим к настройке логов.

Логи настраиваются в файле rsyslog.conf. Для этого открываем данный файл при помощи команды:

sudo vi /etc/rsyslog.conf

Ищем в файле строки и снимаем с них комментирование:

$ModLoad imudp

$UDPServerRun 514

$UDPServerAddress 127.0.0.1

Выполняем рестарт rsyslog для обновления настроек:

sudo service rsyslog restart

Готово. Логи настроены. Они будут храниться по адресу /var/log/haproxy.log.

Шаг 5. Запуск HAProxy

Теперь мы можем запустить HAProxy на нашем VPS-сервере:

sudo service haproxy restart

Готово. Мы настроили SSL-терминацию и балансировку нагрузки для наших веб-серверов. Осталось лишь провести проверку сервера – посетите его по HTTP и по HTTPS. Если все было настроено корректно, все HTTP подключения должны переводиться на HTTPS. 


Остались вопросы? Пишите!

Подтвердить

Принимая Соглашение, Вы подтверждаете, что ознакомились и согласны с вышеизложенным соглашением, Условиями использования сайта, Политикой конфиденциальности и Условиями возврата денежных средств.

>

Готовы попробовать?

Да! Попробовать бесплатно!

Остались вопросы?
Звоните! 8 (800) 555-5737