【终极】哪吒监控 V1 使用唯一域名随意开关 CDN 且不用修改任何配置
早前写过一篇《哪吒监控 V1 使用唯一域名开启 CDN 和反向代理配置教程》详细说明了怎样使用唯一域名开启 Cloudflare CDN 并利用 1Panel 配置反向代理。很多朋友使用了这个方法搭建了哪吒监控 V1 面板。
上周,所有使用了 Cloudflare CDN 的哪吒 V1 面板小鸡突然全部掉线,经过排查,事情与 Cloudflare 升级 gRPC 配置有关。虽然在故障大约 1 天后,Cloudflare CDN 已修复问题,但我还是重新写了一篇《哪吒监控 V1 使用唯一域名关闭 CDN 改用直连后的配置修改》给出了使用唯一域名关闭 CDN 改用直连后的配置。
那么,既然关闭和开启 CDN,每次都要更改反代配置,有没有方法直接使用同一套配置,不用做任何更改?这样下次出现 CDN 问题,只需要去 Cloudflare 的 DNS 里面关闭域名的小黄云就行?
答案是有的,以下就是终极懒人配置:
1Panel 域名证书
如果你使用的是 Cloudflare 的 15 年自签证书,现在需要更换为公开 CA 签发的免费证书(1Panel 自带申请免费证书并自动续签的功能),这样在关闭 CDN 后就不会出现证书链的问题(Cloudflare 的 SSL/TLS 加密模式更改为【完全】)。
1Panel 域名配置文件
打开 1Panel 你添加的哪吒面板域名——配置文件,在最后面加上代码:
# 定义真实 IP 变量
map $http_x_real_ip $temp_ip {
"" $http_cf_connecting_ip;
default $http_x_real_ip;
}
map $temp_ip $temp_ip2 {
"" $http_x_forwarded_for;
default $temp_ip;
}
map $temp_ip2 $real_ip {
"" $remote_addr;
default $temp_ip2;
}
# 允许头部包含下划线
underscores_in_headers on;
# 定义上游服务器
upstream dashboard {
keepalive 512;
server 127.0.0.1:8008;
}
如果你使用的是其它面板(比如宝塔)或程序,完整的配置文件结构应该是这样的:
http {
# 其他全局配置...
# 真实 IP 获取
map $http_x_real_ip $temp_ip {
"" $http_cf_connecting_ip;
default $http_x_real_ip;
}
map $temp_ip $temp_ip2 {
"" $http_x_forwarded_for;
default $temp_ip;
}
map $temp_ip2 $real_ip {
"" $remote_addr;
default $temp_ip2;
}
# 允许头部包含下划线
underscores_in_headers on;
# 定义上游服务器
upstream dashboard {
keepalive 512;
server 127.0.0.1:8008;
}
# 其他全局配置...
server {
# server配置...
# 反向代理配置(location块)...
}
}
1Panel 域名反向代理源文
域名——反向代理——源文,使用下面的配置替换:
location ^~ / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $real_ip;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_read_timeout 1800s;
proxy_send_timeout 1800s;
proxy_buffer_size 128k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 0;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control "private, no-store";
proxy_ssl_server_name on;
}
# gRPC 服务
location ^~ /proto.NezhaService/ {
grpc_set_header Host $host;
grpc_set_header X-Real-IP $real_ip;
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 X-Real-IP $real_ip;
proxy_set_header Origin https://$host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 1800s;
proxy_send_timeout 1800s;
proxy_pass http://127.0.0.1:8008;
}
面板后台设置
- 前端真实 IP 请求头设置为
X-Real-IP
- Agent 真实 IP 请求头设置为
X-Real-IP
无论是否开启 CDN 都无需修改任何设置,因为我们通过 Nginx 的 map 指令动态确定了 X-Real-IP
头部的值。
至此,所有设置完成。
这个统一配置的好处是简化了管理,不需要在切换 CDN 状态时手动修改 Nginx 配置和哪吒面板设置,系统会自动选择正确的 IP 来源。
版权声明:本文为原创文章,版权归 𝙈𝙄𝙎𝘼𝙆𝘼.𝙀𝙎 所有,转载请联系博主获得授权。
本文地址:https://misaka.es/archives/48.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。
献上我真诚的感谢
每一步都仔细看了,前端能正常运行,但是套cf无法登录后台提示:
该网页无法正常运作
如果问题仍然存在,请与网站所有者联系。
HTTP ERROR 444
取消cf cdn后正常,报错日志:
162.158.189.114 - - [09/May/2025:11:11:25 +0800] "GET /dashboard HTTP/2.0" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
172.70.208.57 - - [09/May/2025:11:11:28 +0800] "POST /proto.NezhaService/ReportSystemInfo2 HTTP/2.0" 200 11 "-" "grpc-go/1.72.0"
104.23.172.77 - - [09/May/2025:11:11:39 +0800] "GET /api/v1/profile HTTP/2.0" 200 32 "https://nz.111.us/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
2025/05/08 10:57:07 [error] 1010453#0: *2387 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 172.71.182.253, server: nz.111.us, request: "GET /api/v1/ws/server HTTP/1.1", upstream: "http://127.0.0.1:8088/api/v1/ws/server", host: "nz.337.plus"
找到问题了,/dashboard 打不开, /dashboard/ 可以打开,在配置中增加
location /dashboard {
# 关键修改:跳转proxy_pass末尾斜杠,显式传递路径
proxy_pass http://127.0.0.1:8088/dashboard/;
# 使用动态确定的真实 IP
proxy_set_header nz-realip $real_ip;
}
看下妥否
博主,你好!在面板后台设置那里改了“前端真实 IP 请求头设置为 nz-realip和Agent 真实 IP 请求头设置为 nz-realip”后,agent那边直接报错提示:“上报系统信息失败: rpc error: code = Unknown desc = real ip header not found”请问该如何解决?谢谢了
更新1panel v2后好像配置出问题了,小鸡纷纷掉线只有一个机在线,应该是openresty同步升级了的原因,能不能看看什么问题然后更新下博客教程,非常感谢
大概是升级后openresty配置掉了
前端真实IP请求头和Agent真实IP请求头设置为nz-realip后,我会被哪吒waf搬了。请问一下这么解决
弄了半天 直到看到这篇博文 佬真的是帮大忙了
通过官方脚本装的docker,然后在1panel进行了反代和修改文件,但是还是连接不到其他小鸡,用ip就行,是还缺少什么步骤吗
请问花体英文可以给个链接吗,谢谢
https://cn.piliapp.com/instagram/fonts/