ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Воскресенье, 8 декабря, 2024

Как настроить обратный прокси с помощью Nginx Proxy Manager (NPM)

Как настроить обратный прокси с помощью Nginx Proxy Manager (NPM)

Научитесь настраивать обратный прокси-сервер с помощью Nginx Proxy Manager, чтобы упростить управление сервером и повысить безопасность всего за несколько простых шагов.

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 в качестве обратного прокси-сервера может дать несколько преимуществ:

 

Объяснение нашей настройки

NPM работает в контейнере Docker. Поэтому убедитесь, что на вашем сервере установлен Docker. Но не волнуйтесь, если у вас его ещё нет; мы вам поможем. Наши руководства по установке Docker почти на все основные дистрибутивы Linux, такие как UbuntuDebian, Fedora, Linux Mint, Pop!_OS, Alma и Rocky Linux, помогут вам легко выполнить эти действия.

Далее давайте уточним нашу настройку. На нашем сервере есть два контейнерных приложения-образца, к которым мы будем перенаправлять трафик: программа для чтения RSS-каналов FreshRSS и приложение для заметок Memos, которые работают на портах 1080 и 5230 соответственно.

Конечно, вы можете работать и с большим количеством приложений. Nginx Proxy Manager может без проблем справляться с такими большими нагрузками. Мы выбрали всего два приложения, чтобы всё было максимально просто и понятно.

Кроме того, мы используем «tmplinux.com» — домен, которым мы владеем и который используем для тестирования. Мы направим две записи DNS A для поддоменов «rss.tmplinux.com» для приложения FreshRSS и «memos.tmplinux.com» для приложения для заметок Memos на общедоступный IP-адрес сервера, на котором работает Nginx Proxy Manager.

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

Как настроить обратный прокси с помощью Nginx Proxy Manager (NPM)

 

Однако, если у вас нет собственного домена, вы всегда можете создать статическую запись для произвольного домена в файле «/etc/hosts».

Но имейте в виду, что если вы воспользуетесь этим подходом, то не сможете получить действительный SSL-сертификат от NPM, потому что для этого вам нужно владеть доменным именем и связать его с реальным публичным IP-адресом.

Теперь, когда всё понятно, давайте перейдём к сути: настройке Nginx Proxy Manager для выполнения задач обратного проксирования.

 

Установите Nginx Proxy Manager

Перед установкой NPM необходимо сначала создать новую сеть Docker. Эта сеть будет соединять NPM с другими контейнерами, с которыми ему нужно взаимодействовать. Если мы этого не сделаем, Nginx Proxy Manager не сможет взаимодействовать с этими контейнерами и отправлять им трафик.

Давайте создадим нашу сеть Docker, выбрав в качестве имени «reverse_proxy».

docker network create reverse_proxy

 

Далее мы убедимся, что всё в порядке и сеть доступна.

docker network ls

 

Настройка сети docker.

Настройка сети docker.

 

После создания сети Docker «reverse_proxy» приступим к установке самого Nginx Proxy Manager. Для начала создайте каталог «npm» и войдите в него.

mkdir npm
cd npm

 

Мы будем развёртывать NPM с помощью Docker Compose. Откройте текстовый редактор и создайте файл «docker-compose.yaml». Вставьте приведённый ниже текст, сохраните его и закройте редактор.

nano docker-compose.yaml
services:
  app:
    container_name: npm
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Общедоступный HTTP-порт
      - '443:443' # Общедоступный HTTPS-порт
      - '81:81' # Веб-порт администратора
    networks:
      - reverse_proxy
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks:
  reverse_proxy:
    name: reverse_proxy
    external: true

 

Как видите, это довольно простой файл Compose. Важно отметить, что порты 80 и 443 предназначены для приёма запросов Nginx Proxy Manager, а порт 81 позволяет получить доступ к веб-интерфейсу администратора NPM.

Кроме того, мы также создаём два тома в текущем каталоге, чтобы хранить данные конфигурации NPM и сертификаты SSL в безопасности. Это важно, потому что по умолчанию Docker не сохраняет данные постоянно; без этих томов все данные будут потеряны при перезапуске контейнера.

Прежде чем мы запустим NPM, давайте убедимся, что никакие другие службы не используют порты 80 и 443, которые необходимы для Nginx Proxy Manager. Если эти порты уже используются, вам нужно будет остановить службы, которые их используют. В противном случае NPM не запустится и выдаст ошибку.

Чтобы узнать, какие порты используются, мы воспользуемся командой netstat:

netstat

 

и посмотрим на вывод для портов 80 и 443. Если их нет в списке, то всё в порядке.

netstat -tulnp

 

Проверьте используемые порты

Проверьте используемые порты

 

Теперь мы готовы приступить к развёртыванию контейнера Nginx Proxy Manager:

docker compose up -d

 

Запуск контейнера Nginx Proxy Manager.

Запуск контейнера Nginx Proxy Manager.

 

Привязка контейнеров к сети Docker NPM

Опять же, менеджер прокси-серверов Nginx должен быть подключен к той же сети, что и контейнеры, которым он перенаправляет запросы, чтобы иметь возможность взаимодействовать с ними. Для этого необходимо изменить их развертывание.

Например, для настройки нашего приложения FreshRSS необходимо добавить часть сети «reverse_proxy», как показано ниже:

Привязка контейнеров к сети NPM Docker.

Привязка контейнеров к сети NPM Docker.

 

Убедитесь, что вы перезапустили свои контейнеры после внесения изменений.

Вы также можете подключить уже запущенные контейнеры к сети «reverse_proxy», которую мы настроили ранее, с помощью следующей команды:

docker network connect reverse_proxy CONTAINER_NAME

 

Или при их запуске, если вы используете одну команду

docker run

 

, подключите их к нужной сети:

docker run --network=reverse_proxy YOUR-OTHER-OPTIONS-HERE

 

Используйте следующую команду, чтобы проверить, используют ли запущенные контейнеры нужную вам сеть Docker.

docker ps --format "table {{.Names}}\t{{.Networks}}"

 

Список запущенных контейнеров Docker вместе с сетью, к которой они принадлежат.

Список запущенных контейнеров Docker вместе с сетью, к которой они принадлежат.

 

Доступ к панели управления Nginx Proxy Manager

Откройте браузер и перейдите по IP-адресу вашего сервера на порт 81 («http://server-ip-address:81»), где вы можете получить доступ к интерфейсу администратора NPM. Войдите, используя учётные данные по умолчанию:

Пользовательский интерфейс Nginx Proxy Manager

Пользовательский интерфейс Nginx Proxy Manager

 

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

Обновите информацию об учетной записи администратора.

Обновите информацию об учетной записи администратора.

 

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

Измените пароль администратора NPM.

Измените пароль администратора NPM.

 

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

Пользователи Nginx Proxy Manager.

Пользователи Nginx Proxy Manager.

 

Выдача SSL-сертификата

Мы готовы выдать действительный SSL-сертификат, чтобы наши сервисы могли безопасно подключаться по протоколу HTTPS. Просто убедитесь, что у вас есть действительная (разрешимая) DNS-запись «A», которая указывает на публичный IP-адрес сервера, на котором вы только что установили Nginx Proxy Manager.

Вы можете быстро проверить это с помощью nslookup или команды dig. Например, мы получаем SSL-сертификат для хоста «memos.tmplinux.com». Быстрая проверка подтверждает, что он указывает на правильный IP-адрес.

andreyex@destroyer: ~/npm$ nslookup memos.tmplinux.com

 

Проверка записи DNS

Проверка записи DNS

 

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

Выдача SSL-сертификата.

Выдача SSL-сертификата.

 

На следующем экране выполните следующие действия:

  1. В разделе «Domain Names» введите доменное имя, для которого вы хотите выдать сертификат.
  2. Введите действительный адрес электронной почты.
  3. Принимайте условия Let’s Encrypt.
  4. Нажмите кнопку “Save”, чтобы начать получение сертификата.

Выдача SSL-сертификата с помощью Nginx Proxy Manager.

Выдача SSL-сертификата с помощью Nginx Proxy Manager.

 

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

Выдача SSL-сертификата.

Выдача SSL-сертификата.

 

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

Выдача SSL-сертификата.

Выдача SSL-сертификата.

 

Настройка обратного прокси с помощью Nginx Proxy Manager

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

 

Обратный прокси NPM с SSL-сертификатом

Перейдите в главное меню, выберите «Hosts», а затем в появившемся подменю выберите «Proxy Hosts».

Добавление хоста.

Добавление хоста.

 

На следующей странице нажмите кнопку «Add Proxy Host».

Добавление хоста.

Добавление хоста.

 

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

Добавление прокси-узла в Nginx Proxy Manager.

Добавление прокси-узла в Nginx Proxy Manager.

 

На вкладке «Details» в поле «Domain Names» введите доменное имя, для которого вы хотите создать обратный прокси-сервер в Nginx Proxy Manager. В нашем случае это имя, для которого мы только что выдали SSL-сертификат на предыдущем шаге, а именно «memos.tmplinux.com».

Раздел «Scheme» имеет решающее значение. Здесь вы можете выбрать между «http» и «https». Этот выбор указывает, прослушивает ли контейнер Docker запросы по протоколу HTTP или HTTPS. Почти во всех случаях контейнеры Docker по умолчанию не настроены на обработку HTTPS, поэтому обычно здесь нужно выбрать «http».

В поле «Forward Hostname/IP» просто введите имя службы Docker. Поскольку мы отправляем трафик как в контейнер NPM, так и в другие контейнеры Docker, чтобы они работали в одной сети Docker, Nginx Proxy Manager подключается к ним, используя имена служб.

Не знаете, как называется эта услуга? Посмотрите на изображение ниже.

Название службы Docker.

Название службы Docker.

 

В поле «Forward Port» введите номер порта контейнера Docker для приёма входящих запросов. Опять же, это не следует путать с портами 80 и 443, на которых прослушивается сам контейнер NPM.

Если вы не уверены в правильности портов, вы можете легко проверить их с помощью следующей команды:

docker ps --format "table {{.Names}}\t{{.Ports}}"

 

Проверьте, какие порты используются запущенными контейнерами Docker.

Проверьте, какие порты используются запущенными контейнерами Docker.

 

Просто чтобы прояснить ситуацию: когда вы видите, например, «1080->80», это означает, что контейнер Docker связывает свой собственный внутренний порт 80 с портом 1080 на хост-компьютере. Другими словами, порт контейнера Docker, на котором он прослушивает запросы, — 80, а не 1080.

Наконец, мы рекомендуем включить опцию “Block Common Exploits” для лучшей защиты от распространённых кибератак.

Не спешите нажимать кнопку «Save», вместо этого перейдите на вкладку «SSL». В меню «SSL Certificate» выберите сертификат Let’s Encrypt, который вы выдали недавно.

Установите SSL-сертификат в Nginx Proxy Manager.

Установите SSL-сертификат в Nginx Proxy Manager.

 

Включите эти настройки:

Установите SSL-сертификат в Nginx Proxy Manager.

Установите SSL-сертификат в Nginx Proxy Manager.

 

Наконец, нажмите “Save”, чтобы применить внесенные изменения.

Настройка обратного прокси в NPM.

Настройка обратного прокси в NPM.

 

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

Обратный прокси с NPM успешно настроен.

Обратный прокси с NPM успешно настроен.

 

Обратный прокси с NPM без SSL

Добавление обратного прокси-сервера в NPM на хост, который не использует SSL-сертификат, похоже на предыдущий пример, но всё, что вам нужно сделать, находится на вкладке «Details». Другими словами, вам не нужно переходить на вкладку «SSL».

Мы добавим запись для «rss.tmplinux.com», которая будет указывать на наш второй контейнер Docker. Чтобы сделать это привычным для вас способом, перейдите в главное меню и выберите «Hosts», затем «Proxy Hosts». После этого просто нажмите кнопку «Add Proxy Host».

Схема — «http», а служба Docker называется «freshrss». Контейнер использует порт 80. Заполните необходимые поля и примените внесённые вами настройки, подтвердив их кнопкой «Save».

Добавление прокси-узла в Nginx Proxy Manager.

Добавление прокси-узла в Nginx Proxy Manager.

 

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

Настройка обратного прокси (без использования SSL) в NPM.

Настройка обратного прокси (без использования SSL) в NPM.

 

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

Обратный прокси с NPM успешно настроен.

Обратный прокси с NPM успешно настроен.

 

Важно отметить, что мы рекомендуем использовать этот вариант только в том случае, если, например, вы будете использовать сервис исключительно в пределах своей домашней сети. Однако если ваш сервис доступен через Интернет, настройте SSL-сертификат в Nginx Proxy Manager, чтобы обеспечить безопасное HTTPS-соединение.

 

Ограничение доступа по IP-адресу в Nginx Proxy Manager

Один из эффективных способов повысить безопасность — ограничить доступ по IP-адресам. Nginx Proxy Manager делает этот процесс невероятно быстрым и простым, требуя всего несколько кликов. Давайте разберёмся, как это работает.

Перейдите в раздел «Access Lists» и нажмите кнопку «Add Access List».

Ограничение доступа по IP-адресу в Nginx Proxy Manager.

Ограничение доступа по IP-адресу в Nginx Proxy Manager.

 

Появится модальное окно. В разделе «Details» укажите любое описательное название по вашему выбору.

Создание нового списка доступа в NPM.

Создание нового списка доступа в NPM.

 

Перейдите на вкладку «Access». Предположим, вы хотите ограничить доступ к диапазону IP-адресов вашей домашней сети «192.168.x.x» и конкретному общедоступному IP-адресу «1.2.3.4».

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

Создание нового списка доступа в NPM.

Создание нового списка доступа в NPM.

 

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

Списки доступа.

Списки доступа.

 

Теперь давайте применим список доступа к одному из наших хостов, «memos.tmplinux.com». Перейдите в раздел “Hosts” -> “Proxy Hosts”, затем нажмите на значок с тремя точками справа и выберите «Edit».

Применение списка доступа NPM к хосту.

Применение списка доступа NPM к хосту.

 

В раскрывающемся меню «Access List» выберите недавно созданный «My Access List» и нажмите «Save» для подтверждения.

Применение списка доступа NPM к хосту.

Применение списка доступа NPM к хосту.

 

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

Запретить доступ с помощью NPM.

Запретить доступ с помощью NPM.

 

Заключение

Настройка обратного прокси-сервера с помощью Nginx Proxy Manager — это надёжное и удобное решение для управления трафиком сервера, повышения безопасности и оптимизации производительности.

Благодаря удобному пользовательскому интерфейсу NPM позволяет пользователям, даже с ограниченным опытом работы с командной строкой, настроить надёжный, производительный и безопасный обратный прокси-сервер.

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

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

Спасибо, что уделили время! Надеюсь, это руководство было для вас полезным. Пожалуйста, напишите мне в комментариях ниже, если у вас есть какие-либо вопросы.

Exit mobile version