В этой статье рассмотрим вопрос организации толкового обратного прокси сервера с удобной панелью управления и обновлением сертификатов. Установку и настройку буду производить на Ubuntu 24.04LTS, скептикам сообщаю это Enterprise вариант развёртывания.
Nginx Proxy Manager - это движок, который управляет обратным проксированием с поддержкой SSL и приятным веб интерфейсом управления, автором проекта создал Docker образ, что уменьшает сложность развёртывания решения.
Содержание статьи
- Возможности решения
- Схема реализации проекта автором
- Системные требования
- Настройка DNS и проброс портов на маршрутизаторе
- Подготовка системы
- Подключение репозитория Docker
- Установка Docker
- Подготовка Docker файла и каталогов под данные
- Развёртывание контейнера Nginx Proxy Manager
- Обзор интерфейса администратора
- Первоначальная настройка
- Настройка Firewall
- Заключение
Возможности решения
- Приятный и безопасный web интерфейс администрирования
- Легко создавать домены для переадресации и редиректа, потоки и хосты 404, не обладая исключительными знаниями в области Nginx
- Поддержка бесплатных SSL от Let's Encrypt, а также возможность подгружать сторонние сертификаты
- Списки доступа и базовая аутентификация HTTP для ваших хостов
- Возможность расширенной конфигурации Nginx
- Управление пользователями, разрешениями и журналом аудита
Схема реализации проекта автором
Проект выглядит следующим образом, есть Провайдер - 1 статический ip адрес - Маршрутизатор, с которого весь входящий трафик нужно раскидывать - Физический сервер с Proxmox 8.2.2, где уже присутствуют виртуальные машины:
- Виртуальная машина с обратным прокси сервером на которую прилетают все запросы из вне
- Проекты типа Elma365 и Odoo в виде отдельных виртуальных машин
Системные требования
Настройка DNS и проброс портов на маршрутизаторе
На DNS сервере вашего хостинг провайдера необходимо создать записи типа А с указанием ip адреса вашего маршрутизатора.
На маршрутизаторе необходимо создать правило DNAT, трафик TCP, порты 80,443 выбираем Forward и указываем локальный адрес nginx
Подготовка системы
Все действия в системе произвожу с повышенными правами:
sudo -s
Обновляем информацию о пакетах в репозиториях:
apt update
Устанавливаем обновления:
apt upgrade -y
Устанавливаем net-tools и mc:
apt install net-tools mc -y
Если у вас статически не настроена сеть, выполним настройку:
Переходим в каталог netplan:
cd /etc/netplan
Смотрим как называется конфигурационный файл:
ls
50-cloud-init.yaml --- у вас скорее всего 00-installer-config.yaml
Приводим к следующему виду:
nano 50-cloud-init.yaml
network:
ethernets:
ens18:
addresses:
- 192.168.100.11/24
nameservers:
addresses:
- 192.168.100.254
search: []
routes:
- to: default
via: 192.168.100.254
version: 2
Сохраняем и выходим:
CTRL+O, CTRL+X
Применяем настройки:
netplan apply
Подключение репозитория Docker
Добавляем официальные GPG ключ Docker:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
Добавляем репозиторий в apt:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем информацию о списке пакетов в репозитории:
apt update
Установка Docker
Устанавливаем самые последние пакеты:
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверка статуса службы Docker:
service docker status
Подготовка Docker файла и создание папок под данные
В корне создаем папку под наш проект:
mkdir /Docker
переходим в директорию:
cd /Docker
В этой директории для последующего проброса в контейнер создадим папки под данные и сертификаты:
mkdir Data SSL_Keys
Создаем docker-compose.yml файл:
nano docker-compose.yml
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# Порты сопоставляются в следующей последовательности <Порты хоста>:<Порты контейнера>
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Web Port
# Сопоставление папок прописывается в следующей последовательности <Путь к папке хоста>:<Путь к папке в контейнере>
volumes:
- ./Data:/data
- ./SSL_Keys:/etc/letsencrypt
Должно получиться так:
Сохраняем и закрываем:
CTRL+O, CTRL+X
Развёртывание контейнера Nginx Proxy Manager
Для скачивания и развертывание контейнера на основании нами подготовленного файла выполним:
docker compose up -d
Процесс пошел:
Как видим процесс завершился благополучно:
Обзор интерфейса администратора
Открываем браузер и пишем адрес нашего сервера, с указанием порта 81:
http://192.168.100.11:81
Администратор по умолчанию:
Email: admin@example.com
Password: changeme
И первым делом нам предлагается сменить почту и имя пользователя:
Выполним эти действия:
Дальше система нам предложит поменять пароль:
На этом установка завершена, панель управления выглядит следующим образом:
Преступаем к настройке.
Первоначальная настройка
Промежуточные прокси сервера
В данном решении можно добавлять промежуточные обратные прокси сервера, но в рамках моих задач этого не требуется, поэтому озвучу настройки поверхностно:
Добавляем промежуточный после нашего прокси сервер:
Указываем для каких доменов будет выполняться редирект, а также адрес хоста, порт
На вкладке SSL включает опции:
На вкладке Advanced на уровне переменных и команд можно вручную прописать правила:
Добавление хостов для редиректа
Для этого на панели выбираем Hosts --> Redirection Hosts:
Нажимаем добавить Хост:
Включаем опции на вкладке SSL:
Добавление SSL сертификатов
Для выполнения этой операции на панели управления переходим на вкладку SSL Certificates и нажимаем добавить сертификат:
Указываем домены и почтовый ящик для регистрации на Let's Encrypt:
На этом наверное все, интерфейс простой и проблем не должно возникнуть при настройке.