哪吒面板nezha v1.10.0 + Cloudflare + Nginx手把手教程

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

image

方式一可以正常运行。


网上的各类安装脚本比较乱,这里采用了官方源码,记录下

前提

  • 一个域名,假设为 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配置源码。

nezha官方nginx配置源码:

源码(我隐藏了,需要点一下我)
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应该能收到通知了。

42 Likes

感谢大佬教程!

4 Likes

教程好评 感谢分享

4 Likes

感谢教程

3 Likes

成功啦,非常感谢 :grinning_face:

3 Likes




大佬 我搭建后,为啥我在Agent输入了命令,可是面板看不到机器呢?

2 Likes

你碰巧了:

或者看看受控端8008端口开了没

3 Likes

开了的 我防火墙都是关闭的
之前的哪吒版本都正常使用的。。。。。。。。。。

2 Likes

今晚掉了,官方群很多人也掉了。我的下午的也好好的,晚上掉了。如果配置了其他Encrypt证书,可以关下小黄云试试。

4 Likes

看来新版确实不稳啊
我就是按照你的教程来的,默认是打开小黄云吧?

3 Likes

对,默认打开的,关了最好配下其他证书。我下午能用的。

4 Likes

应该是Cloudflare的问题。掉了一大批。
https://www.nodeseek.com/search?q=哪吒

4 Likes

这么不巧 我刚搭建就出问题
还能用吗

4 Likes

我更新了教程,你看 更新的 方式二 部分,稍微改下。我的已经正常了。

2 Likes

sudo certbot --nginx -d 123.com -d www.123.com -d dashboard.123.com

我的域名是103006.xyz ,那么是输入
sudo certbot --nginx -d 103006.xyz -d www.103006.xyz -d nezha.103006.xyz
吗?
我之前用的caddy,
我是不是可以sudo certbot --nginx -d nezha.103006.xyz

1 Like

感谢大佬教程

2 Likes

caddy应该是能自动配置证书的。不用运行sudo certbot --nginx 等。

运行

openssl s_client -connect dashboard.123.com:443 -servername dashboard.123.com

试试,看输出有没有 Verify return code: 0 (ok)等。

或者看浏览器域名左边查看安全和证书

1 Like

不过我caddy没在这台服务器上。
我还是按照你这个继续搞完吧

1 Like

sudo certbot --nginx -d nezha.103006.xyz
我用这个命令只给nezha.103006.xyz申请证书可以吗?

1 Like

可以的,这样只配一个域名的证书

nezha 反代用了 nginx,用这个可以;
nezha 反代用了 caddy,caddy应该自动会配证书 [不太了解]