我有两台机器:
机器 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
完整配置有效。不知道您复制了什么。