哪吒探针
官方GitHub地址
主面板仓库(核心项目,现在官方组织地址):https://github.com/colbymchenry/codegraph
旧地址(已迁移归档,不再更新):https://github.com/naiba/nezha
Agent 客户端仓库(各服务器探针程序):https://github.com/nezhahq/agent
一键安装脚本仓库:https://github.com/nezhahq/scripts
官方文档:https://nezha.wiki/
Gitee 国内镜像:https://gitee.com/naibahq/nezha(国内下载脚本提速用)
服务器配置
1核1g芝加哥服务器
可以购买以下服务商的服务器,价格比较实惠:
https://cloud.colocrossing.com/cart.php?a=confproduct&i=1
https://my.racknerd.com/cart.php?a=confproduct&i=0
1.连接服务器
我使用的是MobaXterm连接服务器,可能会出现网络问题,这个就需要自己开魔法解决。
2.配置服务器,安装docker
安装 Docker
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
| sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/debian Suites: $(. /etc/os-release && echo "$VERSION_CODENAME") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
启动并验证 Docker
1 2 3 4 5 6 7 8 9 10 11
| sudo systemctl enable docker
sudo systemctl start docker
sudo docker run hello-world
docker compose version
|
看到 hello-world 输出欢迎信息 = 安装成功
可选:让普通用户不用 sudo 也能用 Docker
1 2 3 4 5 6
| sudo usermod -aG docker $USER newgrp docker
docker ps docker compose version
|
3.拉取哪吒探针镜像
先放行8008端口,先检查系统有没有安装ufw或者有没有防火墙配置,我这里没找到,所以我选择直接安装ufw而不是在网页配置防火墙规则这样比较简单,注意需要先放行 SSH(22端口)然后再启动,防止远程链接断开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo apt update && sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 8008/tcp
echo "y" | sudo ufw enable
sudo ufw status verbose
|
下一步我们就可以去拉取镜像了
1 2 3 4 5 6 7 8
| curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh
chmod +x nezha.sh
./nezha.sh
|
然后它会询问你的安装方式,选择Docker安装,然后选择1进行面板的安装

4.配置域名
可以自己在阿里云或腾讯云购买个便宜的域名,我是在下面买的
https://www.namesilo.com/
买了个域名之后,我们将域名绑定到我们的服务器。
点击下面这个小球:

在DNS这里进行配置一下域名解析,将域名绑定到我们的服务器,上面是主域名,底下是子域名:

然后我们用域名访问一下,出现画面说明成功:

5.配置Caddy反代
首先开放443端口
1 2 3 4 5
| ufw allow 443/tcp
ufw reload
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| apt update
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy
systemctl status caddy --no-pager
ss -tlnp | grep -E ':80|:443|:8008'
|
下一步就是让 Caddy 接管 域名,反代到 127.0.0.1:8008,它会自动申请 HTTPS 证书。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| 先确认一件事:云服务器安全组里已经放行这 3 个端口:
- 80/tcp - 443/tcp - 8008/tcp
如果没放行,先放行 80 和 443。
然后按下面做。
第 1 步:备份 Caddy 配置
cp /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak
第 2 步:编辑配置
nano /etc/caddy/Caddyfile
把里面内容改成下面这样(需要根据你们自己域名去修改):
域名 { reverse_proxy 127.0.0.1:8008 }
www.域名 { redir https://域名{uri} }
改完后:
- Ctrl + O 保存 - 回车确认 - Ctrl + X 退出
第 3 步:检查并重载 Caddy
caddy fmt --overwrite /etc/caddy/Caddyfile
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
第 4 步:看证书是否申请成功
journalctl -u caddy -n 50 --no-pager
然后再看端口:
ss -tlnp | grep -E ':80|:443|:8008'
正常的话,这时你应该能看到 443 也开始监听了。
第 5 步:浏览器测试 打开:
https://daxiaohuo.top/dashboard
如果能正常打开,说明 HTTPS 已经成功。
|
我们再优化一下Caddy配置,把真实 IP 头和 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| cat > /etc/caddy/CaddyFile <<'EOF'
daxiaohuo.top { @grpcProto { path /proto.NezhaService/* }
reverse_proxy @grpcProto { header_up Host {host} header_up nz-realip {remote_host} transport http { versions h2c read_buffer 4096 } to 127.0.0.1:8008 }
reverse_proxy { header_up Host {host} header_up Origin https://{host} header_up nz-realip {remote_host} transport http { read_buffer 16384 } to 127.0.0.1:8008 } }
www.daxiaohuo.top { redir https://daxiaohuo.top{uri} } EOF
caddy fmt --overwrite /etc/caddy/Caddyfile
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
journalctl -u caddy -n 30 --no-pager
|
接下来修改面板配置(目前还没挂 Cloudflare 代理,所以不要填 CF-Connecting-IP):
- Agent 连接地址:域名:443
- 通过 TLS 连接 Agent:y
- 前端真实IP请求头:nz-realip
- Agent真实IP请求头:nz-realip
无需勾选直连ip,使用直连 IP 适合的是哪吒直接暴露公网、没有反代头处理的场景。
nz-realip是我们自己在 Caddy 里约定的一个请求头名字
流程大概如下:
- 访问者先到 Caddy
- Caddy 再把请求转发给哪吒
- 转发时,Caddy 顺手把“真实客户端 IP”塞进一个请求头
- 这个请求头名字就叫 nz-realip
常见的几种请求头:
- CF-Connecting-IP:Cloudflare 传来的头
- X-Real-IP / X-Forwarded-For:很多反代常见头
- nz-realip:我们当前这份 Caddy 配置里专门传给哪吒的头
6.给自身服务器安装探针服务并关闭公网8008

点击上面的安装命令就会生成对应的命令,然后去自己服务器里去执行那条命令,就可以看到自己的机器了,
别忘了配置对游客隐藏。

最后就是关闭公网8008了
1 2
| ufw deny 8008/tcp ufw reload
|
接下来把 Docker 的 8008 只绑定到本机:
先看配置文件:
cat /opt/nezha/dashboard/docker-compose.yaml
找到类似这一段:
ports:
- “8008:8008”
把它改成:
ports:
- “127.0.0.1:8008:8008”
1 2 3 4 5 6 7 8
| nano /opt/nezha/dashboard/docker-compose.yaml
cd /opt/nezha/dashboard
docker compose up -d
|
然后检查端口:
ss -tlnp | grep -E ‘:80|:443|:8008’
期望看到的是:
- 80 被 caddy 监听
- 443 被 caddy 监听
- 8008 只监听在 127.0.0.1
然后就配置好了可以在其他的机器上也都用命令下载
7.配置Cloudflare代理
- 去 Cloudflare 注册账号并添加自己的域名
https://dash.cloudflare.com/
- Cloudflare 会给你两条 Nameserver
- 去你的域名注册商后台,把域名的 NS 改成 Cloudflare 给的那两条
- 等生效
- 生效后,在 Cloudflare DNS 里新加一条子域名配置(子域名用于给网页登录,主域名用于给 Agent 通信),不再去原服务商那里配
接下来修改Caddy配置
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| cat > /etc/caddy/Caddyfile <<'EOF'
daxiaohuo.top { @grpcProto { path /proto.NezhaService/* } reverse_proxy @grpcProto { header_up Host {host} header_up nz-realip {remote_host} transport http { versions h2c read_buffer 4096 } to 127.0.0.1:8008 }
reverse_proxy { header_up Host {host} header_up Origin https://{host} header_up nz-realip {remote_host} transport http { read_buffer 16384 } to 127.0.0.1:8008 } }
panel.daxiaohuo.top { reverse_proxy { header_up Host {host} header_up Origin https://{host} header_up nz-realip {header.CF-Connecting-IP} transport http { read_buffer 16384 } to 127.0.0.1:8008 } } EOF
|
验证并重新加载caddy配置
1 2 3 4 5 6 7 8
| caddy fmt --overwrite /etc/caddy/Caddyfile
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
|
Cloudflare 面板里改这两个设置
到 SSL/TLS:
- Overview -> 设为 Full (strict)
到 Network:
- WebSockets -> 开启


| 配置 |
核心作用 |
不设的后果 |
| SSL/TLS → Full (strict) |
全程 HTTPS 加密,适配 Caddy 反代 |
面板无限跳转、打不开 |
| Network → WebSockets 开启 |
支持 WebSocket 穿透,保障面板实时功能 |
监控、终端、Agent 全失效 |
然后就可以访问了