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

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

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

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

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

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

server {

listen 443;

location / {

proxy_pass http://mygrafana.example.com;

}

я увидел, что машина A использует порт 443 для отправки уведомлений Telegram, поэтому я использовал этот порт для прослушивания ---> Вот логи, где я видел порт 443 lvl=eror msg="failed to send notification" logger=alerting.notifier uid= error="Post https://api.telegram.org/XXXXXXXXXXXX/sendMessage: dial tcp XX.XX.XX.XX:443: connect: network is unreachable".

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

Здесь, в логах grafana, кажется, что нет подключения к машине Blvl=eror msg="failed to send notification" connect: network is unreachable"

1
задан 19 October 2021 в 14:23
1 ответ

Использование Nginx в качестве обратного -Прокси-сервер для повсеместного доступа к Grafana

Constellation:

Сервер A — это сервер без Интернета (, т.е. Выделенный сервер, NAS и т. д.)
сервер B — это сервер с Интернетом И доступом к локальной сети (Вторая карта Ethernet, т.е.)

В данном случае я сам предполагается, что оба сервера находятся в одной локальной сети или разрешены владельцем или правилами брандмауэра для этого:-)

Запуск на сервере A

Мы должны проверить точку,

  • если graphana прослушивает свой порт по умолчанию на 3000
  • если graphana слушает только локальный хост или открыт куда угодно

Действия на сервере A:

В случае, если это неизвестно, мы можем использовать

lsof -Pi :3000

Это скажет вам, слушает ли он только локальный хост или нет.

У Grafana есть отличная документация, которую можно найти здесь.https://grafana.com/docs/grafana/latest/administration/configuration/

Ленивый администратор с сервера A

пропускает руководство на случай, если он слушает локальный хост и не любит трогать или изменять графаны.
Мы также можем использовать nginx для этого шага, используя либо значение по умолчанию, потому что, по моему предположению, больше ничего не работает.:


#Original from https://grafana.com/tutorials/run-grafana-behind-a-proxy/
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  #Allow only my LAN's to access this
  allow 10.0.0.0/8;
  allow 192.168.0.0/16;
  allow 172.16.0.0/16;
  #Finally, disallow the rest
  deny all;
 
  server_name _;
  listen 80;
  root /usr/share/nginx/html;
  index index.html index.htm;

  location / {
    proxy_pass http://localhost:3000/;
  }

  # Proxy Grafana Live WebSocket connections.
  location /api/live {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
    proxy_pass http://localhost:3000/;
  }
}

Что делает приведенная выше конфигурация?

Я хочу не прикасаться к Grafana и просто использовать для этого NGINX. Более того, теперь я могу получить доступ по IP из локальной сети к этому экземпляру.

  • Сервер А --ВЫПОЛНЕНО.

Запуск на сервер B

Самый простой!

Установите nginx с помощью диспетчера пакетов

apt -получите установку nginx apt install nginx

И т. д. В зависимости от вашего дистрибутива.

Конфигурация для NGINX

server {
# https redirect
        server_name grafana.mydoma.in;
        listen 80;
        return 301 https://$host$request_uri;


}

server {
        proxy_read_timeout 3600;
# *if you need plain http uncomment the port 80*
# *remind, that you will comment out the above, else it wont work*
        #listen 80;
        listen 443 ssl http2;
        server_name grafana.mydoma.in;
        
                location / {
                        proxy_pass              http://10.0.0.1:3000;
                        proxy_set_header        Host $http_host;
                        
}
    ssl_certificate /etc/letsencrypt/live/grafana.mydoma.in/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/grafana.mydoma.in/privkey.pem; # managed by Certbot

}

Я предполагаю, что здесь вы используете lets encrypt в качестве провайдера SSL.

10.0.0.1 — это IP-адрес сервера A, так как он прослушивает порт 80 с недопустимым именем (_), он всегда будет использовать это, если вы, конечно, удалили любую другую конфигурацию по умолчанию:-)

конец // Выводы

Можно, когда все нормально работает,доступ к grafana отовсюду. Краткое напоминание:

  • Вам НЕ НУЖЕН NGINX на сервере A , когда он прослушивает локальную сеть или ВСЕ устройства .
    • В этом случае вы можете пропустить установку NGINX на сервер A
    • и сразу перейти ко второй части.

Веселись;-)

Обновление:

  • ОП утверждает, что конфигурация не работает. Нет, работает нормально.
root@nginx-verify:/etc/nginx/sites-enabled# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

2
ответ дан 20 October 2021 в 04:59

Теги

Похожие вопросы