nginx
June 3

Настраиваем Nginx Proxy Manager для NUT

Если вы используете NUT для мониторинга источников бесперебойного питания (ИБП), то наверняка сталкивались с необходимостью организовать доступ к веб-интерфейсу через удобный домен. Мы разберем, как это сделать простым и понятным способом через Nginx Proxy Manager.

Зачем нужен Nginx Proxy Manager для NUT?

Веб-интерфейс NUT работает через CGI-скрипты (например, upsstats.cgi и upsimage.cgi), и это было основной проблемой при настройке Nginx. Эти скрипты могут быть доступны только по локальному адресу (например, http://192.168.1.8/cgi-bin/nut/upsstats.cgi). Далее мы рассмотрим, как сделать их доступными через удобное доменное имя (например, nut.home.local) и защитить соединение через HTTPS.


Подготовка сервера NUT

Перед настройкой Nginx Proxy Manager убедитесь, что:

  1. Установлен и настроен NUT.
  2. В NPM добавлен SSL сертификат - самоподписанный или Let's Encrypt.
  3. Локальный DNS знает доменное имя nut.home.local и на какой IP перенаправлять запросы.
  4. Эти скрипты доступны напрямую по IP адресу, например:
    http://192.168.1.8/cgi-bin/nut/upsstats.cgi


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

Теперь перейдем к самому интересному — настройке Nginx Proxy Manager.

Создаем новый прокси-хост

  1. Открываем веб-интерфейс Nginx Proxy Manager.
  2. Создаем новый прокси-хост:
    • Domain Names : nut.home.local
    • Scheme : https
    • Forward Hostname/IP : 192.168.1.8
    • Forward Port : 80

Добавляем Custom Locations

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

Правило 1: Корневой путь

  • Location : /
  • Scheme : http
  • Forward Hostname/IP : 192.168.1.8/cgi-bin/nut/upsstats.cgi
  • Forward Port : 80

Это правило перенаправляет все запросы к корню (/) на основной скрипт upsstats.cgi.

Правило 2: Путь для upsstats.cgi

  • Location : /upsstats.cgi
  • Scheme : http
  • Forward Hostname/IP : 192.168.1.8/cgi-bin/nut/upsstats.cgi
  • Forward Port : 80

Это правило обрабатывает запросы к https://nut.home.local/upsstats.cgi.

Правило 3: Путь для upsimage.cgi

  • Location : /upsimage.cgi
  • Scheme : http
  • Forward Hostname/IP : 192.168.1.8/cgi-bin/nut/upsimage.cgi
  • Forward Port : 80

Это правило нужно для динамической генерации изображений через upsimage.cgi.

Настройка Advanced

В разделе Advanced добавляем следующие строки:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass_request_headers on;
proxy_pass_request_body on;


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

За что отвечает каждая из них:

proxy_set_header Host $host;

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

proxy_set_header X-Real-IP $remote_addr;

Передаёт реальный IP-адрес клиента в заголовке X-Real-IP. Это позволяет backend-серверу узнать настоящий IP пользователя, а не IP прокси-сервера.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Добавляет IP-адрес клиента к цепочке IP-адресов в заголовке X-Forwarded-For. Если запрос уже содержит этот заголовок, то к нему добавляется ещё один IP (адрес клиента, с которым Nginx установил соединение). Это полезно при наличии нескольких прокси на пути запроса, чтобы backend мог видеть всю цепочку адресов.

proxy_set_header X-Forwarded-Proto $scheme;

Указывает протокол (http или https), по которому клиент обратился к прокси. Это важно для backend-приложений, которые должны знать, был ли исходный запрос защищённым (https) или нет.

proxy_pass_request_headers on;

Включает передачу всех заголовков, полученных от клиента, на backend-сервер. По умолчанию Nginx передаёт только стандартные заголовки, а с этой опцией — все, включая кастомные.

proxy_pass_request_body on;

Включает передачу тела запроса (например, данных POST) на backend-сервер. Обычно это включено по умолчанию, но явное указание гарантирует, что тело запроса не будет отброшено.


Проверка работы

  1. Открываем браузер и переходим по адресу:
    https://nut.home.local
  2. Убеждаемся, что страница загружается корректно.
  3. Проверяем, отображаются ли изображения (например, график заряда батареи).

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

  • Получить доступ к веб-интерфейсу NUT через удобное доменное имя.
  • Защитить соединение через HTTPS.
  • Автоматически перенаправлять запросы к нужным CGI-скриптам.