Как настроить обратный прокси с помощью 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 в качестве обратного прокси-сервера может дать несколько преимуществ:
- Простота в использовании. Даже если вы не очень разбираетесь в технических вопросах, вы можете настроить полнофункциональный обратный прокси-сервер всего за 20–30 минут.
- Безопасность. Он может скрывать характеристики и детали внутренних серверов, обеспечивая дополнительный уровень безопасности.
- Балансировка нагрузки. NPM может распределять трафик между несколькими серверами, повышая производительность и надежность веб-приложений.
- Управление SSL: автоматические и простые процессы настройки и обновления 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.
Перед установкой NPM мы должны сначала настроить новую сеть Docker. Эта сеть соединит NPM с любыми другими контейнерами, с которыми ему необходимо взаимодействовать. Если мы этого не сделаем, прокси-менеджер Nginx не сможет взаимодействовать с этими контейнерами и отправлять в них трафик.
Давайте создадим нашу сеть Docker, выбрав в качестве имени «reverse_proxy».
docker network create reverse_proxy
Далее проверим, что всё в порядке и сеть доступна.
docker network ls
Создав сеть 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' # 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: true
Как видите, это довольно простой файл Compose. Важно отметить, что порты 80 и 443 — это те порты, через которые Nginx Proxy Manager будет получать запросы, а порт 81 позволяет вам получить доступ к интерфейсу веб-администратора NPM.
Кроме того, мы также настраиваем два тома в текущем каталоге для обеспечения безопасности данных конфигурации NPM и сертификатов SSL. Это очень важно, поскольку по замыслу Docker не сохраняет данные постоянно; без этих томов все данные будут потеряны при перезапуске контейнера.
Прежде чем развернуть NPM, давайте убедимся, что никакие другие службы не используют порты 80 и 443, которые необходимы для Nginx Proxy Manager. Если эти порты уже используются, вам необходимо остановить службы, которые их используют. В противном случае NPM не запустится и выдаст ошибку.
Чтобы узнать, какие порты используются, мы воспользуемся командой netstat
и посмотрим ее выходные данные для портов 80 и 443. Если их нет в списке, можно продолжать.
netstat -tulnp
Теперь мы готовы приступить к развертыванию контейнера Nginx Proxy Manager:
docker compose up -d
Связывание контейнеров с сетью Docker NPM
Опять же, прокси-менеджер Nginx должен использовать одну и ту же сеть с контейнерами, к которым он передает запросы, чтобы иметь возможность взаимодействовать с ними. Это требует изменения их развертываний.
Например, корректировка, внесенная в наше развертывание FreshRSS, включает добавление сетевой части «reverse_proxy», как показано ниже:
Обязательно перезапустите контейнеры после изменений.
Вы также можете связать уже запущенные контейнеры с сетью «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}}"
Доступ к панели управления Nginx Proxy Manager
Откройте браузер и перейдите по IP-адресу вашего сервера через порт 81 («http://server-ip-address:81»), где вы сможете получить доступ к интерфейсу администратора NPM. Войдите в систему, используя учетные данные по умолчанию:
- Имя пользователя: [адрес электронной почты защищен]
- Пароль: changeme
Появится всплывающее окно с просьбой обновить информацию вашей учетной записи администратора. Введите свое полное имя, имя пользователя и действующий адрес электронной почты, затем нажмите кнопку «Сохранить», чтобы подтвердить изменения.
Откроется новое окно для обновления пароля администратора. Введите «changeme» в поле «Текущий пароль», а затем выберите и введите новый безопасный пароль в следующих двух полях. Нажмите «Сохранить», чтобы применить изменения.
Вы перейдете на страницу пользователя, где увидите, что ваша учетная запись администратора обновлена.
Выдача SSL-сертификата
Мы готовы выдать действительный сертификат SSL, чтобы наши сервисы могли безопасно подключаться через HTTPS. Просто убедитесь, что у вас установлена действительная (разрешимая) запись DNS «A», которая указывает на общедоступный IP-адрес сервера, на котором вы только что установили Nginx Proxy Manager.
Вы можете быстро убедиться в этом с помощью nslookup или команды dig. Например, мы получаем сертификат SSL для хоста «memos.tmplinux.com». Быстрая проверка подтверждает, что он указывает на правильный IP-адрес.
Выберите «SSL-сертификаты» в главном меню. Затем нажмите кнопку «Добавить SSL-сертификат», чтобы получить сертификат через веб-интерфейс Nginx Proxy Manager.
На следующем экране выполните следующие действия:
- В поле «Имена доменов» введите имя домена, для которого вы хотите выдать сертификат.
- Введите действительный адрес электронной почты.
- Примите условия Let’s Encrypt.
- Нажмите кнопку «Сохранить», чтобы начать получение сертификата.
NPM быстро начнет работать «за кулисами», а весь процесс настройки сертификата займет не более 20-30 секунд.
Страница автоматически перезагрузится, и если все пройдет успешно, ваш новый SSL-сертификат для указанного домена появится готовым.
Настройка обратного прокси с помощью Nginx Proxy Manager
Сейчас мы подошли к самой интересной части: настройке обратного прокси-сервера с помощью Nginx Proxy Manager. Мы рассмотрим два сценария: один, в котором мы используем сертификат SSL для безопасного соединения HTTPS, и другой, в котором мы настраиваем обратный прокси-сервер без сертификата, используя только HTTP. Давайте начнем.
Обратный прокси-сервер NPM с сертификатом SSL
Перейдите в главное меню, выберите «Хосты», а затем выберите «Прокси-хосты» в появившемся подменю.
На следующей странице нажмите кнопку «Добавить прокси-хост».
Этот раздел имеет решающее значение для настройки успешного обратного прокси-соединения, поэтому мы подробно описали каждый вариант ниже.
На вкладке «Подробности» в поле «Имена доменов» введите имя домена, для которого вы хотите, чтобы Nginx Proxy Manager создал обратный прокси. В нашем случае это имя, для которого мы только что выдали сертификат SSL на предыдущем шаге, а именно «memos.tmplinux.com».
Раздел «Схема» имеет решающее значение. Здесь вы можете выбрать между «http» и «https». Этот выбор указывает, прослушивает ли контейнер Docker запросы HTTP или HTTPS. Почти во всех случаях контейнеры Docker не настроены по умолчанию на обработку HTTPS, поэтому обычно здесь лучше использовать «http».
В поле «Переслать имя хоста/IP» просто введите имя службы Docker. Поскольку мы отправляем трафик как в контейнер NPM, так и в другие контейнеры Docker, которые используют одну и ту же сеть Docker, прокси-менеджер Nginx подключается к ним, используя имена их служб.
Не знаете, как называется услуга? Посмотрите на изображение ниже.
В поле «Порт переадресации» введите номер порта контейнера Docker для приема входящих запросов. Опять же, не следует путать его с портами 80 и 443, которые прослушивает сам контейнер NPM.
Если вы не уверены в портах, вы можете легко проверить их с помощью следующей команды:
docker ps --format "table {{.Names}}\t{{.Ports}}"
Просто чтобы прояснить ситуацию, когда вы видите «1080->80» для Например, это означает, что контейнер Docker связывает свой внутренний порт 80 с портом 1080 на главном компьютере. Другими словами, сам порт контейнера Docker, который он прослушивает, — 80, а не 1080.
Наконец, мы рекомендуем включить параметр «Блокировать распространенные эксплойты» для лучшей защиты от распространенных кибератак.
Не спешите нажимать кнопку «Сохранить»; вместо этого переключитесь на вкладку «SSL». В меню «SSL-сертификат» выберите сертификат Let’s Encrypt, который вы выдали недавно.
Включите эти настройки:
- «Принудительно использовать SSL»: автоматически перенаправляет трафик с HTTP на HTTPS для безопасного просмотра.
- «Поддержка HTTP/2»: рекомендуемая версия протокола HTTP, используемая сегодня.
- «HSTS включен»: помогает защититься от определенных вредоносных атак.
Наконец, нажмите «Сохранить», чтобы применить изменения.
Момент истины! Направьте свой браузер на адрес, который вы установили в NPM. Ваше приложение должно работать по безопасному протоколу HTTPS, на что указывает значок замка в адресной строке. Что я могу добавить, кроме как – поздравляю!
Обратный прокси-сервер NPM без SSL
Добавление обратного прокси-сервера в NPM на хост, который не использует сертификат SSL, аналогично предыдущему примеру, но все, что вам нужно сделать, находится на вкладке «Подробнее». Другими словами, вам не нужно касаться вкладки «SSL».
Мы добавим запись «rss.tmplinux.com», указывающую на наш второй контейнер Docker. Чтобы сделать это привычным для вас способом, перейдите в главное меню и выберите «Хосты», затем «Прокси-хосты». После этого просто нажмите кнопку «Добавить прокси-хост».
Схема — «http», а служба Docker — «freshrss». Контейнер использует порт 80. Заполните необходимую для вашего случая информацию и примените сделанные настройки, подтвердив их кнопкой «Сохранить».
Обратите внимание, что в отличие от нашего первого хоста «memos.tmplinux.com», для которого мы выдали и настроили использование SSL-сертификата, наш новый адрес помечен как «только HTTP ». ».
Указывая нашему браузеру адрес, 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». Завершив настройку параметров, нажмите кнопку «Сохранить», чтобы применить изменения.
Если вы впервые создаете список доступа, он появится вверху списка. Если вам нужно внести изменения, не волнуйтесь: вы можете легко отредактировать их в любое время, щелкнув трехточечный значок справа и выбрав «Изменить».
Теперь давайте применим список доступа к одному из наших хостов «memos.tmplinux.com». Перейдите к «Хосты» -> «Прокси-хосты», затем нажмите трехточечный значок справа и выберите «Изменить».
В раскрывающемся меню «Список доступа» выберите недавно созданный «Мой список доступа» и нажмите «Сохранить» для подтверждения.
Вот и все. Теперь, если мы попытаемся получить доступ к сервису с IP-адреса, отличного от тех, которые разрешены в нашем «Моем списке доступа», Nginx Proxy Manager отобразит «403 Forbidden». страница, показанная ниже.
Заключение
Настройка обратного прокси-сервера с помощью Nginx Proxy Manager предлагает надежное и удобное решение для управления трафиком сервера, повышения безопасности и оптимизации производительности.
Предоставляя удобный пользовательский интерфейс, NPM делает возможным для пользователей, даже с ограниченным опытом работы с командной строкой, возможность настройки надежного, производительного и безопасного обратного прокси-сервера.
Он также эффективно упрощает интеграцию сертификатов SSL и средств контроля доступа, устраняя большую часть сложностей, традиционно связанных с настройкой такого сервера.
Для получения дополнительной информации мы настоятельно рекомендуем посетить официальную документацию NPM или сайт проекта.
Спасибо за ваше время! Надеюсь, вы найдете это руководство полезным. Пожалуйста, дайте мне знать в разделе комментариев ниже, если у вас есть какие-либо вопросы.