哪吒监控V1使用唯一域名开启CDN和反向代理配置教程

前言

哪吒监控是一款轻量级的服务器监控工具,但在默认配置下,它需要同时开放两个端口(面板端口和gRPC端口)。本教程将介绍如何通过反向代理和CDN配置,使哪吒监控只需要通过一个域名即可访问,同时提升访问速度和安全性。

准备工作

  1. 一个已经安装好的哪吒监控V1
  2. 一个域名(本文以 monitor.example.com 为例)
  3. Nginx 或 Caddy 服务器
  4. Cloudflare 账号(可选,用于CDN加速)

反向代理配置

Nginx 配置

首先,我们需要创建一个 Nginx 配置文件来反向代理 gRPC 端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name data.example.com; # 代理服务器域名,Agent 将通过此域名连接到 Dashboard

ssl_certificate /data/letsencrypt/fullchain.pem; # 域名证书路径
ssl_certificate_key /data/letsencrypt/key.pem; # 域名私钥路径
ssl_stapling on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # 可能与其他配置文件冲突,如有冲突请注释掉
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

underscores_in_headers on;

keepalive_time 24h;
keepalive_requests 100000;
keepalive_timeout 120s;

location / {
grpc_read_timeout 300s;
grpc_send_timeout 300s;
grpc_socket_keepalive on;
grpc_pass grpc://grpcservers;
}
}

upstream grpcservers {
server localhost:5555; # 哪吒监控的 gRPC 端口
keepalive 512;
}

Caddy 配置

如果你使用 Caddy 作为反向代理,配置会更加简单:

1
2
3
4
5
6
7
8
data.example.com:443 { # 代理服务器域名,Agent 将通过此域名连接到 Dashboard
reverse_proxy {
to localhost:5555
transport http {
versions h2c 2
}
}
}

哪吒监控 Dashboard 配置

  1. 登录哪吒监控面板,进入设置页面
  2. 非CDN的面板服务器域名/IP 字段中,填入前面配置的 Nginx 或 Caddy 域名,例如 data.example.com,并保存
  3. 在哪吒监控服务器上,打开 /opt/nezha/dashboard/data/config.yaml 文件
  4. 修改 proxygrpcport 为 Nginx 或 Caddy 监听的端口,例如 443
  5. 由于在 Nginx 或 Caddy 中启用了 SSL/TLS,将 tls 设置为 true
  6. 保存文件后重启 Dashboard

Agent 配置

登录哪吒监控管理后台,复制一键安装命令,在相应的服务器上执行,重新安装 Agent。

启用 Cloudflare CDN(可选)

根据 Cloudflare gRPC 要求:gRPC 服务必须监听 443 端口,并且必须支持 TLS 和 HTTP/2。因此,要启用 CDN,必须在配置 Nginx 或 Caddy 反向代理 gRPC 时使用 443 端口,并配置证书(Caddy 会自动申请和配置证书)。

  1. 登录 Cloudflare,选择你使用的域名
  2. 进入 网络 标签页,打开 gRPC 开关
  3. 进入 DNS 标签页,找到配置在 Nginx 或 Caddy 中反向代理 gRPC 的域名的 DNS 记录,点击橙色云朵启用 CDN

启用 gRPC 后可能不会立即生效,需要等待一段时间。可以使用 curlnezha-agent -d 进行验证:

1
curl -H "content-type: application/grpc+proto" -H "authorization: Bearer test" https://data.example.com -v

如果看到类似以下输出,说明 gRPC 配置成功:

1
2
3
4
5
6
7
< HTTP/2 405 
< date: Wed, 20 Dec 2023 08:56:27 GMT
< content-type: application/grpc+proto
< cf-ray: 8386ac12dabd5ddc-HKG
< cf-cache-status: DYNAMIC
< grpc-message: Received a HEADERS frame with :method "GET" which should be POST
< grpc-status: 13

使用 Docker 部署 SWAG 反向代理(可选)

如果你想使用 Docker 来部署 SWAG(Secure Web Application Gateway)作为反向代理,可以使用以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
services:
swag:
image: linuxserver/swag:latest
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- URL=your_server_name #域名
- VALIDATION=dns #默认为http,使用cloudflare申请证书需要配置为dns
- SUBDOMAINS=wildcard #可选为www,通配符域名证书必须设置为wildcard
- DNSPLUGIN=cloudflare #可选
- EMAIL=your_email@example.com #自动申请证书必须填写
- ONLY_SUBDOMAINS=false #可选
- STAGING=false #可选
- SWAG_AUTORELOAD=true #建议开启,更新配置后会自动重启nginx
volumes:
- ./swag/config:/config # 方便备份文件,迁移
network_mode: bridge
ports:
- 16443:443 #家庭网络需自己映射端口
- 16680:80 #家庭网络需自己映射端口
restart: unless-stopped

结语

通过以上配置,我们成功实现了哪吒监控通过单一域名访问,同时启用了 CDN 加速,提升了访问速度和安全性。这种方式特别适合家庭网络或无法直接暴露多个端口的环境。

参考资料

  1. 哪吒监控官方文档:https://nezha.wiki/
  2. Nginx gRPC 文档:https://nginx.org/en/docs/http/ngx_http_grpc_module.html
  3. Cloudflare gRPC 支持:https://developers.cloudflare.com/network-services/grpc/