Рейтинг:1

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

флаг in

У меня две машины:

Машина А: Установлена ​​Grafana / Нет доступа к интернету / Нужно отправлять уведомления в Telegram

Машина Б Nginx установлен / Доступ в интернет

Я хотел бы отправлять эти уведомления Telegram, но на машине A нет Интернета, поэтому для этого мне нужно использовать B.

Я создал эту конфигурацию на машине B (в /etc/nginx/сайты-доступны):

сервер {

слушать 443;

место расположения / {

proxy_pass http://mygrafana.example.com;

}

Я видел, что машина А использует порт 443 для отправки уведомлений Telegram, поэтому я использовал этот порт для прослушивания ---> Вот логи, где я видел порт 443 lvl=eror msg="не удалось отправить уведомление" logger=alerting.notifier uid= error="Post https://api.telegram.org/XXXXXXXXXXXX/sendMessage: набрать tcp XX.XX.XX.XX:443: подключиться: сеть недоступна".

Но это не работает, похоже, что эта конфигурация не работает.

Вот в логах графаны вроде нет связи с машиной Б lvl=eror msg="не удалось отправить уведомление" подключиться: сеть недоступна"

djdomi avatar
флаг za
установить nginx на b и перепроксировать его на a, если он находится в том же месте / локальной сети
aldegalan avatar
флаг in
@djdomi Не могли бы вы привести простой пример, чтобы попытаться сделать то же самое? И я поставил это как ответ, спасибо заранее
Рейтинг:2
флаг za

Использование 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 прошла успешно

полный конфиг работает. Не знаю, что вы скопировали.

aldegalan avatar
флаг in
Здравствуйте, @djdomi похоже, что в конфигурации есть какая-то синтаксическая ошибка или что-то в этом роде (сервер B)
djdomi avatar
флаг za
nginx -t говорит вам, что я пропустил

Ответить или комментировать

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