Настройка Nginx в качестве reverse прокси для Apache

В зависимости от того, какие данные предоставил центр сертификации клиенту, установку можно разбить на несколько пунктов:

Настройки Apache

Тут от настроек не так много, главное установить нужный порт и настроить видимость сервера только внутри себя. Порт 80 мы использовать больше не можем, так как им будет пользоваться nginx поэтому возьмем порт 81.

Редактируем файл /etc/httpd/

#ставим внутренний адрес и меняем порт на 81 Listen 127.0.0.1:81 #KeepAlive запросы позволяют устанавливать постоянные соединения между клиентом и сервером. Это экономит ресурсы на отсутствии повторной установки соединений. KeepAlive Off

Для небольшой оптимизации так же отключим функцию отложенного закрытия соединения так как в нашем варианте настройки она только замедлит работу.

Создаем виртуальный хост для нашего сайта с минимальными настройками. Это может быть общий файл  или на каждый сайт свой файл.

# Указываем выбранный порт: <VirtualHost 127.0.0.1:81> ServerName ServerAlias DocumentRoot /home/www/html/site CustomLog /var/log/httpd/_ combined ErrorLog /var/log/httpd/_ <Directory «/home/www/htmlsite»> AllowOverride none </Directory> </VirtualHost>

Директива AllowOverride включает использование файла .htaccess. В этом случае при каждом запросе Apache будет обращаться к директории сайта для его поиска. Лучше переместить все настройки в конфигурационный файл немного ускорив обработку.

Преамбула

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

С самого начала я заинтерисовался Docker’ом с целью быстрого создания небольшого, но довольно универсального кластера под собственные проекты (рабочие, учебные, etc). Так как системным администрированием я профессионально заниматься не собирался — я решил, что должен обучиться основам кластеризации ровно до того момента, когда я смог бы без особых затруднений разворачивать любой популярный программный стек для веб-проекта. Далее я рассмотрю разворачивание на Docker следующих конфигураций:

Преамбула
  • LAMP;
  • LEMP;
  • MEAN.
Читайте также:  Обзор MIUI 12.5, когда выйдет и какие смартфоны получат обновление

Первые две в представлении, думаю, не нуждаются. Третяя же состоит из MongoDB,  ,   MEAN я чаще всего использовал для написания RESTful API, например, для дальнейшего разрабатывания на его основе мобильного приложения.

После этого я сам себе немного усложнил задачу, добавив следующие требования:

Преамбула
  1. Возможность без затруднений использовать различные домены (или, зачастую, поддомены) для каждого отдельного контейнера (по принципу виртуальных хостов).
  2. Использование HTTPS-протокола по-умолчанию. Более того, хотелось бы организовать бесплатное генерирование SSL-сертификатов, не уступающих при этом платным аналогам.
  3. Разворачивание на одном и том же сервере GitLab CE — в качестве основной CVS-системы для работы над проектами не только в одиночку, но и в команде.

Основные определения:

  • Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы.

  • Letsencrypt — Бесплатный автоматический центр авторизации (CA). Предоставляет бесплатные сертификаты для включения поддержки HTTPS (SSL / TLS) на любом веб-сайте.

  • GitLab Community Edition — Open Source аналог GitHub. Обеспечивает управление Git-репозиториями, анализ кода, отслеживание ошибок, работу с каналами активности, создание Wiki и т.д.
Преамбула

Терминология HAProxy

В балансировке нагрузки и проксировании существует много терминов и понятий. Рассмотрим самые основные из них.

Списки управления доступом (ACL)

В балансировке нагрузки списки управления доступом используются для проверки определённых условий и выполнения действий (например, для выбора сервера, блокировки запроса и т.п.) согласно результату этой проверки. Списки контроля доступа обеспечивают гибкую переадресацию сетевого трафика на основе различных факторов (например, с учётом количества подключений к бэкэнду).

ACL выглядит так:

acl url_blog path_beg /blog

Такой ACL выполняется, если путь запроса пользователя начинается с /blog (например, -entry-1).

Бэкэнд

Бэкэнд – это набор серверов, которые обрабатывают запросы. Настройки этих серверов находятся в разделе backend конфигурационного файла HAProxy. В основном бэкэнд определяется:

  • алгоритмом балансировки нагрузки;
  • и списком серверов и портов.

Бэкэнд может состоять из одного или нескольких серверов. В целом, чем больше на бэкэнде серверов, тем он надёжнее и тем выше потенциальная мощность нагрузки. За счет распределения нагрузки между несколькими серверами растёт производительность и отказоустойчивость приложения.

Так выглядит настройка двух бэкэндов (web-backend и blog-backend) с двумя серверами в каждом.

backend web-backend balance roundrobin server web1 :80 check server web2 :80 check backend blog-backend balance roundrobin mode http server blog1 :80 check server blog1 :80 check

  • Строка balance roundrobin определяет алгоритм балансировки нагрузки.
  • Строка mode http определяет уровень балансировки (в данном случае это уровень 7).
  • Опция check в конце директив server настраивает проверку состояния серверов бэкэнда.

Фронтэнд

Фронтэнд определяет, каким образом запросы должны направляться на бэкэнд. Настройки фронтэнда определены в разделе frontend конфигурации HAProxy и состоят из следующих компонентов:

  • Наборы IP-адресов и портов (например, 10.1.1.7:80, *:443);
  • Списки управления доступом.
  • Правила use_backend, которые определяют, какой бэкэнд использовать в зависимости от условий ACL.
  • Правила default_backend которые обрабатывают случаи, не отвечающие предыдущим правилам.

Фронтэнд можно настроить для поддержки различных типов сетевого трафика, о чём и пойдёт речь в следующем разделе.

 У вас есть приватный ключ, сам SSL сертификат, а также цепочка сертификатов

Данный вариант отличается от первого только тем, что нужно добавить цепочку сертификатов в сам SSL сертификат.

Будем считать, что SSL сертификат имеет имя site_, а цепочка сертификатов

В таком случае объединение файлов можно выполнить так:

Перейдем в директорию, где расположены данные файлы (например /root/site_certs/)

[[email protected] ~]# cd /root/site_certs/

Объединим файлы

[[email protected] certs]# cat >> site_

Далее выполните действия по установке сертификата: Установка SSL сертификата на nginx