Найти в Дзене

Как запустить прокси-сервер для сервисов?

Из
схемы понятно, что нам необходимо открывать порты на роутере, чтобы
получить доступы к сервисам, но очень не хочется этого делать, а в
идеале хотелось бы обращаться к нашим сервисам по следующей схеме: <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:
Оглавление

Потребность и актуальность

-2

Из
схемы понятно, что нам необходимо открывать порты на роутере, чтобы
получить доступы к сервисам, но очень не хочется этого делать, а в
идеале хотелось бы обращаться к нашим сервисам по следующей схеме: <service>.<my_domain> или <service>.<my_domain>.duckdns.org. Ниже опишем как это сделать.

Решение

Nginx Proxy Manager (далее NPM) - это решение на котором будем основываться. Общая схема взаимодействия выглядит таким образом:

Схема работы NPM
Схема работы NPM

Если
коротко, то мы через наш прокси-сервер получаем запросы от роутера,
которые отсылают нам пользователи и перенаправляем их на необходимые нам
сервисы.
Необходимо открыть порты на роутере 80 и 443 для работы
прокси-сервера. У каждого роутера могут быть свои особенности, но нам
моем роутере 
TP-Link Archer A6 это делается так:

Открытие портов в TP-Link Archer A6
Открытие портов в 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&quot;
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
Выпуск SSL в NPM

Данное
действие позволит нам выпустить ssl-сертификат и не заботиться о сроке
его действия, так как NPM сама его выпустит заново.
Если совсем упрощенно, то мы сможем заходить на наши сервисы не только по http, но и по https.

Базовая проверки подлинности

Заходим
во вкладку "Access Lists" и добавляем название нашей базовой проверки.
На вкладке "Authorization" заполняем какие пользователи и под какими
login-password могут входить. Данное действие необходимо выполнить для
случаев когда у наших сервисов по каким-то причинам нет авторизации и
они будут открыты всему интернету.

Добавление нового сервиса

На вкладке " Dashboard" добавляем наш первый сервис:

Добавление нового сервиса в NPM
Добавление нового сервиса в NPM

Если выполнили все верно, то сможем обращаться как и планировали htps://<service>.<my_domain>.duckdns.org.
Если
сервис находится в 1 сети с сервисом прокси-сервера, то возможно
обращаться к сервису не оп IP, а по его названию. Именно для этой цели
мы создавали отдельную сеть (см. выше).

Ошибки

На вкладке "Settings" можем настроить поведение, если NPM получит host о котором он ничего не знает. Я сделал так:

<iframe
width="720"
height="405"
src="https://rutube.ru/play/embed/533131e664756f25173f7794e19afba4"
frameBorder="0"
allow="clipboard-write; autoplay"
webkitAllowFullScreen
mozallowfullscreen
allowFullScreen
></iframe>

Пусть люди слушают музыку и смотрят видео c ДВ:)

В редакторе видео не воспроизводится6:36ИВАН ПАНФИLOVE - Море Воды (Клип 2021)
В редакторе видео не воспроизводится6:36ИВАН ПАНФИLOVE - Море Воды (Клип 2021)

Дополнительные возможности

Существует отдельный сервис для мониторинга NPM . Я этим сервисом не пользуюсь, но знаю о его существовании.

ИТОГ

Какие преимущества получаем при использовании NPM:

  • Упрощение настройки Nginx.
    Инструмент предоставляет удобный веб-интерфейс, который позволяет
    создавать и управлять прокси-серверами без необходимости редактировать
    конфигурационные файлы вручную.
  • Управление обратным прокси.
    Nginx Proxy Manager позволяет устанавливать обратные прокси для
    веб-приложений, размещать несколько приложений на одном сервере и
    проксировать запросы на соответствующие приложения на основе URL-адресов
    или доменных имён.
  • Управление SSL-сертификатами.
    Инструмент обеспечивает удобный способ управления SSL-сертификатами,
    что позволяет администраторам легко настраивать HTTPS для своих
    веб-сайтов.
  • Логирование и статистика.
    Nginx Proxy Manager предоставляет возможность просмотра логов и
    статистики обратного прокси, что позволяет отслеживать и анализировать
    трафик и запросы к приложениям.
  • Защита. Инструмент может использоваться для настройки аутентификации и авторизации, чтобы ограничить доступ к веб-приложениям.
  • Дополнительные функции.
    В Nginx Proxy Manager есть такие функции, как настройка
    перенаправлений, работа с доменными именами и обработка различных типов
    запросов.

Ссылки:

  1. Как бесплатно получить собственный домен?
  2. Как установить Proxmox?
  3. Как установить Docker?
  4. Зачем нужен собственный сервер в 2025?
  5. Мой GitHub.

*.wikipedia.org - РКН: иностранный владелец ресурса нарушает закон РФ.