使用 Nginx 作为反向代理随处访问 Grafana

使用 Nginx 作为反向代理随处访问 Grafana

我有两台机器:

机器 A:已安装 Grafana / 无法访问互联网 / 需要向 Telegram 发送通知

机器 BNginx 安装/访问互联网

我想发送那些 Telegram 通知,但是机器 A 没有互联网,所以我必须使用 B 来做到这一点。

我在机器 B 中创建了以下配置(在/etc/nginx/sites-available):

server {

listen 443;

location / {

proxy_pass http://mygrafana.example.com;

}

我看到机器 A 使用端口 443 发送电报通知,所以我使用该端口进行监听 ---> 以下是我看到端口 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

使用 Nginx 作为反向代理随处访问 Grafana

星座:

服务器 A 是服务器没有互联网(即专用服务器、NAS 等...)
服务器 B 是服务器互联网访问 LAN(即第二张以太网卡)

在这种情况下,我自己假设两台服务器都位于同一个 LAN 上,或者所有者或防火墙规则允许这样做 :-)

在服务器A上启动

我们必须验证这一点,

  • 如果 graphana 监听其默认端口 3000
  • 如果 graphana 仅监听本地主机或向任何地方开放

服务器A上的操作:

如果未知,我们可以使用

lsof -Pi :3000

这将告诉您它是否仅监听 Localhost。

Grafana 有一个很好的文档,可以在这里找到 https://grafana.com/docs/grafana/latest/administration/configuration/

来自服务器 A 的懒惰管理员

跳过手册,以防万一,它会监听 localhost 并且不喜欢触摸或更改 grafana。
我们也可以使用 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 从 LAN 访问此实例。

  • 服务器 A——完成。

启动至服务器 B

简单的一个!

使用包管理器安装 nginx

apt-get 安装 nginx apt 安装 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 是服务器 A 的 IP,由于它使用无效的 (_) 名称监听端口 80,因此它将始终使用此 IP,当然,如果您删除了任何其他默认配置 :-)

结束 // 结论

当一切正常时,您可以从任何地方访问 grafana。简短提醒:

  • 惯于需要服务器 A 上的 NGINX当它监听 LAN 或所有设备时
    • 在这种情况下,您可以跳过在服务器A上安装NGINX
    • 并直接进入第二部分。

玩得开心 ;-)

更新:

  • 楼主说配置会失败。没问题,运行正常。
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

完整配置有效。不知道您复制了什么。

相关内容