NGINX Proxy Manager
NGINX Proxy Manager - сервис (WEB GUI) для управления конфигурацией NGINX. Идет как готовый docker контейнер, в проекте реализовано максимально простое и удобное управление основными базовыми функциями NGINX.
NGINX Proxy Manager
Open Source проект ссылки на Github и Офф сайт
Возможности:
- Простой и удобный web интерфейс
- Легкая настройка проксирования без редактирования nginx config файла
- Управление пользователями, разрешения и журнал аудита
- Возможность установить свои или сгенерировать SSL сертификаты
- Контроль доступа, средства авторизации, разрешенные и запрещенные адрес листы.
Основное назначение это проксирование по URL домена.
Например имеются 3 домена:
- akmalov.com
- test.akmalov.com
- lvl.akmalov.com
Все домены обращаются по одному внешнему IP на маршрутизатор Маршрутизатор перенаправляет все соединения которые идут на 80 или 443 порт на NGINX Proxy Manager NGINX в зависимости от домена перенаправляет на необходимый сервер, VM, Container в локальной сети. Подставляет сертификат, управляет разрешениями.
Установка NGINX Proxy Manager
1. Подготовка среды
Буду устанавливать на LXC Proxmox
- OS: Ubuntu 22.02
- CPU: 2
- RAM: 1 Gb
- Disk: 10 Gb
Обновление пакетов и установка docker
apt update && apt upgrade -y
apt install -y docker.io docker-compose
2. Настройка docker-compose.yaml
version: "3"
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP port
- '443:443' # HTTPS port
- '81:81' # Admin web port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
По умолчанию создается файловая база данных SQLite - data/database.sqlite
Есть так же решения c использованием отдельной базы данных MySQL на офф.сайте.
В моем случаи SQLite хватает с огромным запасом
Запуск контейнера
docker-compose up -d
После запуска контейнера, можно подключиться к панели администратора
http://YOUR-IP:81/
Логин и пароль по умолчанию
Email: admin@example.com
Password: changeme
При первом запуске предложит настроить админскую учетную запись и изменить пароль
Настройка NGINX Proxy Manager
Так выглядит изначально GUI главного экрана (Все по нулям т.к. ничего не добавляли еще)
SSL сертификаты есть возможность сгенерировать с помощью Let'Encrypt в одно нажатие или добавить свои сертификаты
Настройка Host Proxy NGINX
Все также интуитивно понтяно, прописываю домен, порт, если нужно подставляю сертификат SSL для HTTPS
Для работы доменов из локальной сети необходимо в DNS домены которые добавлены в Proxy Host направлять на адрес NGINX Proxy Manager
В общем и целом этого хватает для решения задач которые описал выше. Хоть и конфиг был бы не такой сложной, но с помощью этого сервиса можно это сделать в несколько кликов.
Дополнительные функции
Распишу еще кое какие полезные фичи, которые использую у себя
Dashboard для nginx proxy manager
Проект отнсительно свежий и активно разрабаывается, выглядит интересно
Красивый графический вывод информации на основе логов, позволяет посмотреть статистику, оценить нагрузку. Написано на Go работает быстро, даже с большим объемом данных, не потребляет много ресурсов.
В docker-compose необходимо указать путь к логам от nginx proxy manager
Страница 404 для nginx proxy manager
Nginx позволяет вместо ошибки 404 сделать redirect на любой другой хост или даже указать свой HTML код
Воспользуюсь Redirect и сделаю красивую страницу для 404
Теперь вместо страницы ошибок он будет перенаправлять на этот URL, с качественным видео
Итоговый docker-compose
В итоге конечный docker-compose у меня выглядит так:
version: "3"
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP Port
- '443:443' # HTTPS Port
- '81:81' # Admin Web Port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
npm-monitoring:
image: xavierh/goaccess-for-nginxproxymanager:latest
restart: always
environment:
- TZ=Asia/Yekaterinburg
- SKIP_ARCHIVED_LOGS=True #optional
- EXCLUDE_IPS=127.0.0.1 #optional
- LOG_TYPE=NPM
ports:
- '82:7880'
volumes:
- ./data/logs:/opt/log
error-page-404:
image: 'kale5/rickroll:latest'
restart: unless-stopped
ports:
- '83:80'