Настраиваем 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 убедитесь, что:
- Установлен и настроен NUT.
- В NPM добавлен SSL сертификат - самоподписанный или Let's Encrypt.
- Локальный DNS знает доменное имя
nut.home.local
и на какой IP перенаправлять запросы. - Эти скрипты доступны напрямую по IP адресу, например:
http://192.168.1.8/cgi-bin/nut/upsstats.cgi
Настройка Nginx Proxy Manager
Теперь перейдем к самому интересному — настройке Nginx Proxy Manager.
Создаем новый прокси-хост
Добавляем 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-сервер. Обычно это включено по умолчанию, но явное указание гарантирует, что тело запроса не будет отброшено.
Проверка работы
- Открываем браузер и переходим по адресу:
https://nut.home.local
- Убеждаемся, что страница загружается корректно.
- Проверяем, отображаются ли изображения (например, график заряда батареи).
Теперь вы знаете, как настроить Nginx Proxy Manager для работы с NUT. Благодаря этому вы сможете: