Использование Nginx в качестве обратного прокси-сервера для повсеместного доступа к Grafana
Созвездие:
Сервер А является сервером без Интернет (например, выделенный сервер, NAS и т. д.)
сервер B является сервером с Интернет И доступ к локальной сети (вторая карта Ethernet т.е.)
В этом случае я предполагаю, что оба сервера находятся в одной локальной сети или разрешены владельцем или правилами брандмауэра :-)
Начать на сервере А
Мы должны проверить точку,
- если графана слушает свой порт по умолчанию на 3000
- если графана слушает только локальный хост или открыт где угодно
Действия на сервере А:
В случае, если это неизвестно, мы можем использовать
lsof-Pi :3000
Это скажет вам, слушает ли он только Localhost или нет.
У Grafana есть хорошая документация, которую можно найти здесь.
https://grafana.com/docs/grafana/latest/administration/configuration/
Ленивый администратор с сервера А
пропускает руководство, если слушает локальный хост и не любит трогать или изменять графаны.
Мы также можем использовать nginx для этого шага, используя либо значение по умолчанию, потому что в моем предположении больше ничего не работает:
#Оригинал с https://grafana.com/tutorials/run-grafana-behind-a-proxy/
карта $http_upgrade $connection_upgrade {
обновление по умолчанию;
'' близко;
}
сервер {
# Разрешить доступ к этому только моей локальной сети
разрешить 10.0.0.0/8;
разрешить 192.168.0.0/16;
разрешить 172.16.0.0/16;
#Наконец, запрещаем остальные
отрицать все;
имя сервера _;
слушать 80;
корень /usr/share/nginx/html;
индекс index.html index.htm;
место расположения / {
прокси_пароль http://localhost:3000/;
}
# Прокси Grafana Live WebSocket соединения.
расположение /API/живой {
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "Обновление";
proxy_set_header Хост $http_host;
прокси_пароль http://localhost:3000/;
}
}
Что делает приведенный выше конфиг?
Я хочу не трогать Grafana и просто использовать для этого NGINX. Более того, теперь я могу получить доступ по IP из локальной сети к этому экземпляру.
Запуск на сервер B
Самый легкий!
Установите nginx с помощью вашего менеджера пакетов
apt-получить установку nginx
метко установить nginx
И т.д.. В зависимости от вашего дистрибутива.
Конфиг для NGINX
сервер {
# https редирект
имя_сервера grafana.mydoma.in;
слушать 80;
вернуть 301 https://$host$request_uri;
}
сервер {
proxy_read_timeout 3600;
# *если вам нужен простой http, раскомментируйте порт 80*
# *напомните, что вы закомментируете вышесказанное, иначе это не сработает*
#слушай 80;
слушать 443 ssl http2;
имя_сервера grafana.mydoma.in;
место расположения / {
прокси_пасс http://10.0.0.1:3000;
proxy_set_header Хост $http_host;
}
ssl_certificate /etc/letsencrypt/live/grafana.mydoma.in/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/grafana.mydoma.in/privkey.pem; # под управлением Certbot
}
Я предполагаю, что здесь вы используете let encrypt в качестве провайдера SSL.
10.0.0.1 — это IP-адрес сервера A, поскольку он прослушивает порт 80 с недопустимым (_) именем, он всегда будет использовать это, если вы, конечно, удалили любую другую конфигурацию по умолчанию :-)
конец // Выводы
Вы можете, когда все работает нормально, получать доступ к grafana отовсюду.
Краткое напоминание:
- Ты НЕ БУДЕТ нужен NGINX на сервере А когда он слушает локальную сеть или ВСЕ устройства.
-
- В этом случае вы можете Пропускать Установка NGINX на Сервер А
-
- И сразу переходим ко второй части.
Развлекайся ;-)
Обновлять:
- OP утверждает, что конфигурация не работает.
Нет, работает нормально.
root@nginx-verify:/etc/nginx/sites-enabled# nginx -t
nginx: синтаксис файла конфигурации /etc/nginx/nginx.conf в порядке
nginx: проверка файла конфигурации /etc/nginx/nginx.conf прошла успешно
полный конфиг работает. Не знаю, что вы скопировали.