Nginx Proxy Manager (NPM) – это простой в использовании инструмент для управления конфигурациями обратных прокси. По сути, он выступает в качестве удобного интерфейса для высокопроизводительного веб-сервера Nginx, а также использует Let’s Encrypt в фоновом режиме для выпуска бесплатных SSL-сертификатов, обеспечивая тем самым HTTPS-подключение к проксируемым сервисам.
По сравнению с другими обратными прокси, такими как Nginx, Caddy или Traefik, основная привлекательность NPM заключается в том, что он предоставляет удобный графический интерфейс для управления настройками прокси, SSL/TLS-сертификатами и контролем доступа, что делает его доступным даже для тех, кто имеет минимальный опыт работы с командной строкой.
Однако если вы хотите попробовать другие варианты обратного прокси, вы можете рассчитывать на наши простые руководства для Nginx и Caddy. А теперь вернемся к теме. Вот основные преимущества Nginx Proxy Manager.
Почему стоит использовать NPM в качестве обратного прокси?
Использование Nginx Proxy Manager в качестве обратного прокси может дать несколько преимуществ:
- Простота использования: Даже если вы не очень технически подкованы, вы сможете настроить полнофункциональный обратный прокси всего за 20-30 минут.
- Безопасность: Он может скрывать характеристики и детали внутренних серверов, обеспечивая дополнительный уровень безопасности.
- Балансировка нагрузки: NPM может распределять трафик между несколькими серверами, повышая производительность и надежность веб-приложений.
- SSL Management: Автоматические и простые процессы установки и продления SSL для зашифрованного трафика, повышающие безопасность веб-сайта с помощью HTTPS.
Объяснение наших настроек
NPM работает в контейнере Docker. Поэтому убедитесь, что у вас есть сервер с установленным Docker. Но не волнуйтесь, если у вас его еще нет. Наши руководства по установке Docker почти на все основные дистрибутивы Linux, такие как Ubuntu, Debian, Fedora, Linux Mint, Pop!_OS, Alma и Rocky Linux, проведут вас через все шаги с легкостью.
Далее давайте уточним нашу настройку. На нашем сервере есть два контейнерных приложения, на которые мы будем проксировать трафик: читалка FreshRSS и приложение для заметок Memos, которые работают на портах 1080 и 5230 соответственно.
Конечно, вы можете работать с гораздо большим количеством портов. Nginx Proxy Manager справится с такой большой нагрузкой без проблем. Мы остановились только на двух приложениях, чтобы сделать все максимально простым и понятным.
Кроме того, мы используем домен «tmplinux.com», который принадлежит нам и используется для тестов. Мы направим две DNS-записи A поддомена, «rss.tmplinux.com» для приложения FreshRSS и «memos.tmplinux.com» для приложения для заметок Memos, на IP-адрес публичного сервера, на котором работает Nginx Proxy Manager.
Вот наш производственный процесс, чтобы дать вам лучшее визуальное представление.
Однако если у вас нет собственного домена, вы всегда можете задать статическую запись для произвольного домена в файле /etc/hosts
.
Но имейте в виду, что при таком подходе вы не сможете получить действительный SSL-сертификат от NPM, потому что для этого вам нужно владеть доменным именем и связать его с реальным публичным IP-адресом.
Теперь, когда все ясно, давайте перейдем непосредственно к делу: настройке Nginx Proxy Manager для выполнения задач обратного прокси.
Установка Nginx Proxy Manager
Перед установкой NPM мы должны сначала настроить новую сеть Docker. Эта сеть соединит NPM с другими контейнерами, с которыми ему нужно будет взаимодействовать. Если этого не сделать, Nginx Proxy Manager не сможет взаимодействовать с этими контейнерами и отправлять им трафик.
Давайте создадим нашу Docker-сеть, выбрав в качестве имени «reverse_proxy».
docker network create reverse_proxyCode language: Bash (bash)
Далее мы проверим, что все в порядке и сеть доступна.
docker network lsCode language: Bash (bash)

После того как сеть «reverse_proxy» Docker-сеть создана, давайте приступим к установке самого Nginx Proxy Manager. В качестве первого шага создайте каталог «npm» и войдите в него.
mkdir npm cd npmCode language: Bash (bash)
Мы будем разворачивать NPM с помощью Docker Compose. Откройте текстовый редактор и создайте файл «docker-compose.yaml». Вставьте в него содержимое, представленное ниже, сохраните его и выйдите.
nano docker-compose.yamlCode language: Bash (bash)
version: '3.8' services: app: container_name: npm image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port networks: - reverse_proxy volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt networks: reverse_proxy: name: reverse_proxy external: trueCode language: YAML (yaml)
Как видите, это довольно простой файл Compose. Важно отметить, что порты 80 и 443 – это порты, через которые Nginx Proxy Manager будет принимать запросы, а порт 81 позволяет вам получить доступ к веб-интерфейсу администрирования NPM.
Кроме того, мы создаем два тома в текущей директории, чтобы сохранить конфигурационные данные NPM и SSL-сертификаты. Это очень важно, потому что по своей конструкции Docker не сохраняет данные постоянно; без этих томов все данные будут потеряны при перезапуске контейнера.
Прежде чем развернуть NPM, давайте убедимся, что никакие другие службы не используют порты 80 и 443, которые необходимы для прокси-менеджера Nginx. Если эти порты уже используются, вам нужно остановить те службы, которые их используют. В противном случае NPM не запустится и выдаст ошибку.
Чтобы узнать, какие порты используются, воспользуемся командой netstat
и посмотрим ее вывод для портов 80 и 443. Если их нет в списке, то все в порядке.
netstat -tulnpCode language: Bash (bash)

docker compose up -dCode language: Bash (bash)

Связывание контейнеров с Docker Network NPM
И снова Nginx Proxy Manager должен иметь общую сеть с контейнерами, к которым он проксирует запросы, чтобы иметь возможность взаимодействовать с ними. Это требует изменения их развертывания.
Например, корректировка нашего развертывания FreshRSS включает в себя добавление сетевой части «reverse_proxy», как показано ниже:

После внесения изменений убедитесь, что вы перезапустили свои контейнеры.
Вы также можете связать уже запущенные контейнеры с сетью «reverse_proxy», которую мы настроили ранее, с помощью следующей команды:
docker network connect reverse_proxy CONTAINER_NAMECode language: Bash (bash)
Или при их запуске, если вы используете одну команду docker run
, подключите их к нужной сети:
docker run --network=reverse_proxy YOUR-OTHER-OPTIONS-HERECode language: Bash (bash)
Используйте следующую команду, чтобы проверить, разделяют ли запущенные контейнеры нужную вам сеть Docker.
docker ps --format "table {{.Names}}\t{{.Networks}}"Code language: Bash (bash)

Доступ к панели управления Nginx Proxy Manager
Откройте браузер и перейдите на IP-адрес вашего сервера по порту 81 («http://server-ip-address:81»), где вы можете получить доступ к интерфейсу администратора NPM. Войдите в систему, используя учетные данные по умолчанию:
- Имя пользователя: name@example.com
- Пароль: changeme

Появится всплывающее окно с предложением обновить информацию об учетной записи администратора. Введите свое полное имя, имя пользователя и действующий адрес электронной почты, а затем нажмите кнопку «Save», чтобы подтвердить изменения.

Откроется новое окно для обновления пароля администратора. Введите «changeme» в поле «Текущий пароль», а затем выберите и введите новый безопасный пароль в следующих двух полях. Нажмите «Сохранить», чтобы применить изменения.

В результате вы перейдете на страницу пользователя, где увидите, что ваша учетная запись администратора была обновлена.

Выдача SSL-сертификата
Мы готовы выпустить действительный SSL-сертификат, чтобы наши сервисы могли безопасно подключаться по HTTPS. Просто убедитесь, что у вас есть действительная (разрешаемая) запись DNS «A», которая указывает на публичный IP-адрес сервера, на котором вы только что установили Nginx Proxy Manager.
Вы можете быстро проверить это с помощью nslookup или команды dig. Например, мы получаем SSL-сертификат для хоста «memos.tmplinux.com .» Быстрая проверка подтверждает, что он указывает на правильный IP-адрес.

В главном меню выберите «SSL Certificates». Затем нажмите кнопку «Добавить SSL-сертификат», чтобы получить сертификат через веб-интерфейс Nginx Proxy Manager.

На следующем экране выполните следующие действия:
- В поле «Имена доменов» введите имя домена, для которого вы хотите выпустить сертификат.
- Введите действительный адрес электронной почты.
- Примите условия Let’s Encrypt.
- Нажмите кнопку «Сохранить», чтобы начать получение сертификата.

NPM быстро начнет работать за кулисами, и весь процесс установки сертификата займет не более 20-30 секунд.

Страница автоматически перезагрузится, и если все прошло успешно, ваш новый SSL-сертификат для указанного домена будет готов.

Настройка обратного прокси с помощью менеджера прокси Nginx
Теперь мы подошли к самой интересной части: настройке обратного прокси с помощью Nginx Proxy Manager. Мы рассмотрим два сценария: один, где мы используем SSL-сертификат для безопасного HTTPS-соединения, и другой, где мы настраиваем обратный прокси без сертификата, используя только HTTP. Давайте начнем.
Обратный прокси NPM с SSL-сертификатом
Перейдите в главное меню, выберите «Хосты», а затем в появившемся подменю выберите «Прокси-хосты».

На следующей странице нажмите кнопку «Добавить прокси-хост».

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

На вкладке «Детали» в поле «Имена доменов» введите имя домена, для которого Nginx Proxy Manager должен создать обратный прокси. В нашем случае это имя, для которого мы только что выпустили SSL-сертификат на предыдущем шаге, а именно «memos.tmplinux.com .»
Раздел «Схема» имеет решающее значение. Здесь вы можете выбрать между «http» и «https». Этот выбор указывает, будет ли Docker-контейнер слушать HTTP- или HTTPS-запросы. Почти во всех случаях контейнеры Docker не настроены на обработку HTTPS по умолчанию, поэтому обычно вы выбираете «http».
В поле «Forward Hostname/IP» просто введите имя службы Docker. Поскольку мы отправляем трафик и контейнеру NPM, и другим контейнерам Docker в одну и ту же сеть Docker, менеджер прокси Nginx подключается к ним, используя имена их сервисов.
Не знаете, как называется служба? Посмотрите на изображение ниже.

В поле «Передаваемый порт» введите номер порта Docker-контейнера для приема входящих запросов. Опять же, не путайте с портами 80 и 443, на которых слушает сам контейнер NPM.
Если вы не уверены в портах, вы можете легко проверить их с помощью следующей команды:
docker ps --format "table {{.Names}}\t{{.Ports}}"Code language: Bash (bash)

Просто чтобы прояснить ситуацию! Когда вы видите, например, «1080->80», это означает, что контейнер Docker соединяет свой собственный внутренний порт 80 с портом 1080 на хост-компьютере. Другими словами, сам порт контейнера Docker, на котором он слушает, – 80, а не 1080.
Наконец, мы рекомендуем включить опцию «Блокировать распространенные эксплойты» для лучшей защиты от распространенных кибер-атак.
Теперь не спешите нажимать кнопку «Сохранить», а перейдите на вкладку «SSL». В меню «SSL-сертификат» выберите сертификат Let’s Encrypt, который вы выпустили некоторое время назад.

Включите эти настройки:
- «Force SSL»: Это автоматически перенаправляет трафик с HTTP на HTTPS для безопасного просмотра.
- «HTTP/2 Support»: Рекомендуемая версия протокола HTTP, используемая сегодня.
- «HSTS Enabled»: Это помогает защититься от некоторых вредоносных атак.

Наконец, нажмите «Save», чтобы применить изменения.

Момент истины! Наведите браузер на адрес, который вы задали в NPM. Ваше приложение должно работать в безопасном режиме по HTTPS, о чем свидетельствует значок замка в адресной строке. Что я могу добавить, кроме поздравлений!

Обратный прокси NPM без SSL
Добавление обратного прокси в NPM к хосту, который не использует SSL-сертификат, похоже на предыдущий пример, но все, что вам нужно сделать, находится на вкладке «Детали». Другими словами, вам не нужно трогать вкладку «SSL».
Мы добавим запись для «rss.tmplinux.com», указывающую на наш второй Docker-контейнер. Чтобы сделать это привычным способом, зайдите в главное меню и выберите «Хосты», а затем «Proxy Hosts». После этого просто нажмите на кнопку «Add Proxy Host».
Схема – «http», а служба Docker называется «freshrss». Контейнер использует порт 80. Заполните необходимую для вашего случая информацию и примените сделанные настройки, подтвердив их кнопкой «Сохранить».

Обратите внимание, что в отличие от нашего первого хоста, «memos.tmplinux.com», для которого мы выпустили и настроили использование SSL-сертификата, наш новый адрес помечен как «HTTP only» .

Направив наш браузер на этот адрес, NPM проксирует трафик на него только через незащищенное HTTP-соединение.

Важно отметить, что мы рекомендуем использовать этот вариант только в том случае, если, например, вы будете использовать сервис исключительно в пределах домашней сети. Однако если ваш сервис доступен через интернет, установите SSL-сертификат в Nginx Proxy Manager, чтобы включить безопасные HTTPS-соединения.
Ограничение доступа по IP-адресу в Nginx Proxy Manager
Одним из эффективных способов повышения безопасности является ограничение доступа по IP-адресам. Nginx Proxy Manager делает этот процесс невероятно быстрым и простым, требуя всего несколько кликов. Давайте пройдемся по нему.
Перейдите в раздел «Списки доступа» и нажмите кнопку «Добавить список доступа».
Появится модальное окно. В разделе «Детали» укажите какое-нибудь описательное имя по вашему выбору.

Перейдите на вкладку «Доступ». Предположим, вы хотите ограничить доступ к диапазону IP-адресов вашей частной домашней сети, «192.168.x.x», и определенному публичному IP-адресу, «1.2.3.4».
Введите адреса, соответствующие вашей ситуации, убедившись, что последняя запись – это директива «deny», установленная на «all». После завершения настройки параметров нажмите кнопку «Сохранить», чтобы применить изменения.

Если вы впервые создаете список доступа, он появится в верхней части списка. Если вам нужно внести изменения, не волнуйтесь – вы можете легко отредактировать его в любое время, нажав на значок с тремя точками справа и выбрав «Редактировать» .


В выпадающем меню «Список доступа» выберите недавно созданный «Мой список доступа» и нажмите «Сохранить» для подтверждения.

Вот и все. Теперь, если мы попытаемся получить доступ к сервису с IP-адреса, отличного от разрешенного в нашем «Моем списке доступа», Nginx Proxy Manager покажет страницу «403 Forbidden», как показано ниже.

Заключение
Настройка обратного прокси с помощью Nginx Proxy Manager – это надежное и удобное решение для управления трафиком сервера, повышения безопасности и оптимизации производительности.
Предоставляя удобный пользовательский интерфейс, NPM позволяет пользователям, даже с ограниченным опытом работы с командной строкой, настроить надежный, производительный и безопасный обратный прокси-сервер.
Он также эффективно упрощает интеграцию SSL-сертификатов и контроля доступа, устраняя большую часть сложностей, традиционно связанных с настройкой такого сервера.
Для получения дополнительной информации мы настоятельно рекомендуем посетить официальную документацию NPM или сайт проекта
Комментарии (0)