Как запустить прокси-сервер для сервисов?
Потребность и актуальность
Из схемы понятно, что нам необходимо открывать порты на роутере, чтобы получить доступы к сервисам, но очень не хочется этого делать, а в идеале хотелось бы обращаться к нашим сервисам по следующей схеме: <service>.<my_domain>
или <service>.<my_domain>.duckdns.org
. Ниже опишем как это сделать.
Решение
Nginx Proxy Manager (далее NPM) - это решение на котором будем основываться. Общая схема взаимодействия выглядит таким образом:
Если коротко, то мы через наш прокси-сервер получаем запросы от роутера, которые отсылают нам пользователи и перенаправляем их на необходимые нам сервисы.
Необходимо открыть порты на роутере 80 и 443 для работы прокси-сервера. У каждого роутера могут быть свои особенности, но нам моем роутере TP-Link Archer A6это делается так:
Создаем необходимые папки и файлы:
mkdir {data,letsencrypt}
touch docker-compose.yml
Для начала работы создадим сеть:
docker network create -d bridge test
Далее создаем наш прокси-сервер через nano docker-compose.yml
:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager-app
restart: unless-stopped
ports:
- '80:80'
- '43013:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "<secret>"
DB_MYSQL_PASSWORD: "<secret>"
DB_MYSQL_NAME: "<secret>"
# Uncomment this if IPv6 is not enabled on your host
#DISABLE_IPV6: 'true'
#отображение реальных ip клиентов в логах sudo docker logs containername
REAL_IP_HEADER: "X-Real-IP"
TRUSTED_PROXIES: "172.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- default
db:
image: mariadb:latest
container_name: nginx-proxy-manager-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: '<secret>'
MYSQL_DATABASE: '<secret>'
MYSQL_USER: '<secret>'
MYSQL_PASSWORD: '<secret>'
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- default
networks:
default:
external: true
name: test
Теперь можем зайти по адресу: http://<ip>:43013
и указать
Email: admin@example.com
Password: changeme
Далее необходимо ввести данные Вашего пользователя + пароль. После этого можем настраивать доступ к нашим сервисам.
SSL
В самом начале настроим ssl-сертификат на вкладке «SSL Certificates». Настраиваем так:
Данное действие позволит нам выпустить ssl-сертификат и не заботиться о сроке его действия, так как NPM сама его выпустит заново.
Если совсем упрощенно, то мы сможем заходить на наши сервисы не только по http
, но и по https
.
Базовая проверки подлинности
Заходим во вкладку «Access Lists» и добавляем название нашей базовой проверки. На вкладке «Authorization» заполняем какие пользователи и под какими login-password могут входить. Данное действие необходимо выполнить для случаев когда у наших сервисов по каким-то причинам нет авторизации и они будут открыты всему интернету.
Добавление нового сервиса
На вкладке « Dashboard» добавляем наш первый сервис:
Если выполнили все верно, то сможем обращаться как и планировали htps://<service>.<my_domain>.duckdns.org
.
Если сервис находится в 1 сети с сервисом прокси-сервера, то возможно обращаться к сервису не оп IP, а по его названию. Именно для этой цели мы создавали отдельную сеть (см. выше).
Ошибки
На вкладке «Settings» можем настроить поведение, если NPM получит host, о котором она ничего не знает. Я сделал так:
<iframe
width="720"
height="405"
src="https://vk.com/video_ext.php?oid=708854916&id=456241709&hash=3c9f00d96cf169d6"
frameBorder="0"
allow="clipboard-write; autoplay"
webkitAllowFullScreen
mozallowfullscreen
allowFullScreen
></iframe>
Пусть люди слушают музыку и смотрят видео c ДВ:).
Дополнительные возможности
Существует отдельный сервис для мониторинга NPM . Я этим сервисом не пользуюсь, но знаю о его существовании.
ИТОГ
Какие преимущества получаем при использовании NPM:
Упрощение настройки Nginx. Инструмент предоставляет удобный веб-интерфейс, который позволяет создавать и управлять прокси-серверами без необходимости редактировать конфигурационные файлы вручную.
Управление обратным прокси. Nginx Proxy Manager позволяет устанавливать обратные прокси для веб-приложений, размещать несколько приложений на одном сервере и проксировать запросы на соответствующие приложения на основе URL-адресов или доменных имён.
Управление SSL-сертификатами. Инструмент обеспечивает удобный способ управления SSL-сертификатами, что позволяет администраторам легко настраивать HTTPS для своих веб-сайтов.
Логирование и статистика. Nginx Proxy Manager предоставляет возможность просмотра логов и статистики обратного прокси, что позволяет отслеживать и анализировать трафик и запросы к приложениям.
Защита. Инструмент может использоваться для настройки аутентификации и авторизации, чтобы ограничить доступ к веб-приложениям.
Дополнительные функции. В Nginx Proxy Manager есть такие функции, как настройка перенаправлений, работа с доменными именами и обработка различных типов запросов.
Ссылки: