2025-04-10T16:00:00Z
昨晚,大量 nezha v1+Cloudflare 用户,因为CF原因,突然agent显示不出。
可以关闭CF小黄云,配置下 Let’s Encrypt 证书就能解决。见最后 方式二 部分。
2025-04-11T16:00:00Z
Update:
这会,cloudflare已经解决问题,Cloudflare Status - Cloudflare: "Under Attack" mode experiencing issues
方式一可以正常运行。
网上的各类安装脚本比较乱,这里采用了官方源码,记录下
前提
- 一个域名,假设为 123.com;
- 一台VPS,或者有公网IP的主机;
方式一:打开小黄云 + Cloudflare Origin Server证书
Cloudflare 设置
域名购买
为了方便可以在Cloudflare 购买域名,否则需要在域名购买商处把 Nameservers修改为 Cloudflare 的Nameservers。
DNS解析
左侧栏DNS-Records,点击Add records。
填写子域名前缀和VPS的IP地址。
gRPC
左侧栏 Network,打开gRPC。
SSL encryption mode.
左侧栏 SSL/TLS-Overview,更改为Current encryption mode 为Full。
SSL证书
SSL/TLS-Origin Server, 新建证书,Hostnames处可以保持默认或者改为 dashboard.123.com。复制证书到记事本,保存为fullchain.pem;复制私钥到记事本,保存为key.pem;两个文件待用。
VPS设置
端口
确保VPS开放了443端口,8008(nezha默认端口),或者你自己自定义的端口
nezha
官方安装命令,v1.10.0版
curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
弹出填写项:
- 域名填写你的域名:433,例如 dashboard.123.com:443
- 端口默认,如自定义端口,需修改后面nginx源码中的8008为自定义端口
- TLS那里,选y
SSL
cd /
sudo mkdir data
cd data
sudo mkdir letsencrypt
cd letsencrypt
sudo vim fullchain.pem #复制之前fullchain.pem记事本中内容进来
sudo vim key.pem #复制之前key.pem记事本中内容进来
Nginx
运行
sudo apt install nginx
sudo vim /etc/nginx/sites-available/dashboard.123.com
填写如下nezha官方nginx配置源码。
- 需要把server_name dashboard.example.com这一行中的域名改为你的域名 dashboard.123.com;
- [可选] 把set_real_ip_from 0.0.0.0/0 这一行修改为 Cloudflare IP 地址范围。
源码(我隐藏了,需要点一下我)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# http2 on; # Nginx > 1.25.1,请注释上面两行,启用此行
server_name dashboard.example.com; # 替换为你的域名
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.2 TLSv1.3;
underscores_in_headers on;
set_real_ip_from 0.0.0.0/0; # 替换为你的 CDN 回源 IP 地址段
real_ip_header CF-Connecting-IP; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认
# 如果你使用nginx作为最外层,把上面两行注释掉
# grpc 相关
location ^~ /proto.NezhaService/ {
grpc_set_header Host $host;
grpc_set_header nz-realip $http_CF_Connecting_IP; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认
# grpc_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行
grpc_read_timeout 600s;
grpc_send_timeout 600s;
grpc_socket_keepalive on;
client_max_body_size 10m;
grpc_buffer_size 4m;
grpc_pass grpc://dashboard;
}
# websocket 相关
location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ {
proxy_set_header Host $host;
proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认
# proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行
proxy_set_header Origin https://$host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_pass http://127.0.0.1:8008;
}
# web
location / {
proxy_set_header Host $host;
proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认
# proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 0;
# proxy_set_header X-Forwarded-Proto $scheme; # 如果你使用nginx作为最外层,就启用此行避免无法正确读取访问的协议
proxy_pass http://127.0.0.1:8008;
}
}
upstream dashboard {
server 127.0.0.1:8008;
keepalive 512;
}
运行[date=2025-04-11 timezone=“Asia/Shanghai”]
sudo ln -s /etc/nginx/sites-available/dashboard.123.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Agent
访问 dashboard.123.com,可进入面板,点击 管理后台。点击头像-个人信息-更新个人资料,修改默认用户名和密码!
点击服务器-安装命令,复制命令到你需要监控的当下这台VPS,或者其他VPS,一键运行, VPS的信息就会在面板中显示出来。
Network
网上搜索全国三网ICMP-Ping,获得对应运行商地址。后台-点击服务-点击+号。填写,例如,名称:上海联通,目标:<搜索的上海联通对应的地址>, 类型选择:ICMP ping。可以添加其他运营商。在前台面板可以看到网络迟延了。
方式二:关闭小黄云 + Let’s Encrypt 证书
在方式一的基础上修改如下:
问题
2025-04-10T16:00:00Z
由于昨晚 nezha v1 + Cloudflare 打开小黄云,这样的配置,大量用户的受控VPS的信息都显示不出来。论坛和群里都有nezha agent挂掉的大量相关消息。
如果出现这种情况,采取关闭小黄云即可。但为了安全需要配置下 Let’s Encrypt 证书,如下:
Cloudflare 新增设置
-
左侧栏 DNS中 dashboard.123.com中的小黄云关闭;
-
左侧栏 SSL/TLS - Overview 中SSL/TLS encryption的Current encryption mode改为Full (strict)。
申请 Let’s Encrypt 证书
一次性申请多个域名的证书,运行
sudo certbot --nginx -d 123.com -d www.123.com -d dashboard.123.com
弹出:
- 第一个同意接受消息邮箱,输入邮箱;
- 第二同意term,输入Y;
- 第三个改善Encrypt,可以输入N.
如上三个域名只有一个证书和秘钥,在如下目录
/etc/letsencrypt/live/123.com/fullchain.pem
/etc/letsencrypt/live/123.com/privkey.pem
话外:这个框中,这次不需要运行:
如果你下次需要为新的子域名 new.123.com配置证书,运行
sudo certbot certificates #查询已有证书的域名
sudo certbot --nginx -d 123.com -d www.123.com -d dashboard.123.com -d new.123.com
修改Nginx配置
修改配置
sudo vim /etc/nginx/sites-available/dashboard.123.com
把
ssl_certificate /data/letsencrypt/fullchain.pem; # 域名证书路径
ssl_certificate_key /data/letsencrypt/key.pem; # 域名私钥路径
改为:
# ssl_certificate /data/letsencrypt/fullchain.pem; # Cloudflare SSL origin server certificates
# ssl_certificate_key /data/letsencrypt/key.pem; # Cloudflare SSL origin server key
ssl_certificate /etc/letsencrypt/live/123.com/fullchain.pem; # letsencrypt certificates
ssl_certificate_key /etc/letsencrypt/live/123.com/privkey.pem; # letsencrypt key
运行如下
sudo nginx -t
sudo systemctl reload nginx
添加通知 (可选)
以离线通知为例:
拼接URL
按照https://nezha.wiki/guide/notifications.html拼接:
https://api.telegram.org/bot<你的机器人Token>/sendMessage?chat_id=<你的用户ID>&text=#NEZHA#
可以把如上链接的text=#NEZHA#,改成text=testmessage复制到链接到浏览器,回车,测试下看能不能收到通知。
nezha面板–后台
通知
通知 – 通知 – 点击"+"添加,填写名称(随意)和URL;
https://api.telegram.org/bot<你的机器人Token>/sendMessage?chat_id=<你的用户ID>&text=#NEZHA#
通知组
分组 – 通知 – 点击"+"添加,填写名称(随意),通知选择上一步的通知名称;
报警规则
通知 – 报警规则 – 点击"+",添加名称(随意)、规则(可以参考https://nezha.wiki/guide/notifications.html,如下例子为离线通知规则),通知组选择上一步的通知组名称,勾选启用。
把你的某个装了agent的VPS关机, bot应该能收到通知了。