# Установка Nginx Proxy Manager в lxc контейнер

**Nginx Proxy Manager (NPM)** — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.

**Основные функции**  
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.  
​

После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.

#### Установка Nginx Proxy Manager

Для установки NPM в lxc контейнер, нам понадобиться скрипт с сайта [https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager](https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager)

А так же **VPN** подключение на роутере, для того что бы весь трафик в сети шел через **VPN**, некоторые пакеты в скрипте не доступны из России

В консоли ноды необходимо ввести

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/nginxproxymanager.sh)"
```

Сообщения о ошибках можно игнорировать, на все вопросы отвечаем **Y**

Если все в порядке, после установки у вас появится доступ к панели по адресу **http://&lt;ip lxc контейнера с portain&gt;:81**

#### Настройка Nginx Proxy Manager

После установки нам необходимо выполнить несколько обязательных вещей

##### Проброс портов к npm  


В OPNsense нам необходимо перейти в раздел **Firewall**, далее **NAT** и перейти в **Port Forward**, в открывшемся окне нажать справа сверху на **+**(add)

В открывшемся окне нужно заполнить поля

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTP; to: HTTP

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTP

**Description**: NPM HTTP for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/fc0image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/fc0image.png)

После этого нажимаем кнопку **Apply changes** и создаем следующее правило кнопкой **+**(add)

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTPS; to: HTTPS

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTPS

**Description**: NPM HTTPS for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/z64image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/z64image.png)

После этого нажимаем кнопку **Apply changes**

##### Покупка домена reg.ru

Для настройки доменных имен в npm доменное имя необходимо купить по этому поводу уже написана [подробная статья](https://habr.com/ru/articles/716002/)

После покупки доменного имени и указания его у ДНС провайдера потребуется время что бы запись появилась у ДНС резолверов, проверить это проще всего командой на любом клиенте сети с установленным линукс, я для этих целей создал отдельный тестовый [lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

<div id="bkmrk-dig-%3C%D0%B2%D0%B0%D1%88-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%3E"><div class="cm-editor ͼ1 ͼ2 ͼ4 ͼ1r"><div class="cm-scroller" tabindex="-1"><div aria-hidden="true" class="cm-gutters cm-gutters-before"><div class="cm-gutter cm-lineNumbers"><div class="cm-gutterElement"><span style="font-family: 'Lucida Console', 'DejaVu Sans Mono', 'Ubuntu Mono', Monaco, monospace;">dig &lt;ваш домен&gt;</span></div></div></div></div></div></div>В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.

##### Настройка сертификата

Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через **certbot, reg.ru** позволяет запрашивать **wildcard** сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.

На сайте **reg.ru** заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.

В **NPM** нужно создать **wildcard-сертификат**, во вкладке **Certificates** нужно нажать на кнопку **Let's Encrypt via DNS**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/oqIimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/oqIimage.png)

В открывшемся окне необходимо заполнить поля  
**Domain Names**: тут указываешь &lt;твоедоменноеимя.ru&gt; и &lt;\*.твоедоменноеимя.ru&gt;

**DNS Provider**: reg.ru

**Credentials File Content**:  
dns\_username=&lt;твоя почта на reg.ru&gt;  
dns\_password=&lt;api колюч&gt;

**Propagation Seconds:** Лучше указать 600 так как сервера reg.ru могут работать не стабильно

После этого необходимо нажать кнопку **Save** и подождать 1-5 минут.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/rn1image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/rn1image.png)

##### Настройка split dns

Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить **split dns** на нашем **opnsense.** Технически можно реализовать эту технологию на любом локальном **dns** сервере, но в opnsense уже установлен **unbound dns**, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку **Services**, далее **Unbound DNS**, далее **Overrides**, в открывшемся окне в разделе **Hosts** нажать на **+**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Fs8image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Fs8image.png)

В открывшемся окне необходимо заполнить поля

**Enabled**: Галочка

**Host**: \*

**Domain**: &lt;твой домен&gt;

**Type**: A (IPv4 address)

**IP address**: &lt;ip адрес lxc контейнера&gt;

**Description**: NPM

Далее нажать кнопку **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/WG9image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/WG9image.png)

Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.

Для этого необходимо перейти во вкладку **Query forwarding** нажать на **+** и в открывшемся окне заполнить поля

**Enabled**: Галочка

**Domain**: ocsp.int-x3.letsencrypt.org

**Server IP**: 1.1.1.1

Далее нажать **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/W7Uimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/W7Uimage.png)

Теперь необходимо перейти в панель **npm** и настроить там группу доступа которую мы будем указывать при создании доменов.

Для этого необходимо перейти во вкладку **Acces list** нажать на кнопку **Add Acces list** и в открывшемся окне заполнить форму

Во вкладке **Details** необходимо указать имя нашей группы  
Во вкладке **Rules** необходимо добавить подсети из которых у нас будет доступ к нашим доменам

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/HUZimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/HUZimage.png)

#### Создание и настройка поддомена

Для создания поддомена нам необходимо перейти во вкладку Proxy Hosts и нажать на кнопку Add Proxy Host, в открывшемся окне необходимо заполнить поля

**Domain Names**: Вводим необходимы домен или поддомен

**Scheme**: В зависимости от панели к которой хотим открыть доступ выбираем http или https

**Forward Hostname / IP**: ip нашего сервиса,

**Forward Port**: Порт нашего сервиса

**Access List**: в зависимости от того хотим ли что бы сервис работал только локально или был публичным выбираем созданную нами группу доступа или Publicly Accessible

**Cache Assets**: (Опционально) Включает кэширование статических ресурсов (CSS, JS, изображения) на прокси-сервере для ускорения загрузки страниц, снижая нагрузку на backend-сервер.   
​

**Block Common Exploits**: (Опционально) Активирует встроенные правила Nginx для защиты от распространённых веб-атак (XSS, SQL-инъекции, кликджекинг) через заголовки безопасности вроде X-Frame-Options и Content-Security-Policy.  
​

**Websockets Support**: (Опционально) Включает поддержку WebSocket-протокола (ws://, wss://), необходимую для real-time приложений вроде чатов, дашбордов или игр (например, Grafana, Homarr в homelab).

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/qo2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/qo2image.png)

Переходим во вкладку **SSL** в открывшемся окне необходимо заполнить поля

**SSL Certificate**: Указываем созданный нами раннее сертификат

**Force SSL**: (Опционально) Принудительно перенаправляет весь HTTP-трафик (порт 80) на HTTPS (порт 443) с помощью 301-редиректа, обеспечивая обязательное шифрование.  
​

**HSTS Enabled**: (Опционально) Включает HTTP Strict Transport Security — браузеры запоминают домен как HTTPS-only на заданный период (max-age), предотвращая MITM-атаки и downgrade до HTTP.  
​

**HTTP/2 Support**: (Опционально) Активирует протокол HTTP/2 для мультиплексирования запросов, сжатия заголовков и ускорения загрузки (требует SSL).  
​

**HSTS Sub-domains**: (Опционально) Расширяет HSTS-политику на все поддомены (includeSubDomains), заставляя браузеры применять HTTPS ко всем \*.domain.com.  
​

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/O8Qimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/O8Qimage.png)

После нажатия кнопки **Save** домен появится в списке и ресурс станет доступен по заданному домену