常见错误
下面是遇到最多的问题。格式统一: 现象 → 原因 → 解决。先从日志入手 —— 几乎总能从中 看到原因:
docker compose logs --tail=100 xpanel
docker compose ps
完整的诊断命令集见 实用命令 一节。
快速速查表:看到什么 —— 该检查什么。
| 日志或界面中的现象 | 可能原因 |
|---|---|
Reverse proxy and HTTPS are required | 来自代理的 X-Forwarded-* 请求头缺失 |
❌ METRICS_USER / ❌ METRICS_PASS | 未设置指标变量 |
| 节点无法连接 | NODE_PORT 被关闭或 SECRET_KEY 不完整 |
address already in use | 端口被其他进程占用 |
certbot 报错退出 | DNS、80 端口或他人的 server_name |
xpanel-db 处于 unhealthy 状态 | .env、卷或 PostgreSQL 版本 |
| 来自 nginx 的 502 Bad Gateway | 面板没有监听 127.0.0.1:3000 |
| 登录不再可用 | APP_SECRET 被更改 |
“Reverse proxy and HTTPS are required”
现象。 面板打不开,xpanel 日志中出现
Reverse proxy and HTTPS are required 一行。
原因。 请求到达面板时没有携带 X-Forwarded-For 和
X-Forwarded-Proto: https 请求头。面板代码中有 middleware,遇到这种情况会
断开连接。
解决。 确认面板前的 nginx 配置中有这两行:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
请通过 https:// 打开面板,而不是 http://。如果 TLS 在更早的地方
(CDN 或负载均衡器上)终止,不要把 X-Forwarded-Proto 替换为 http。
现成的配置见 反向代理 一节。
未设置 METRICS_USER 和 METRICS_PASS
现象。 xpanel 容器不断重启,日志中出现 ❌ METRICS_USER
或 ❌ METRICS_PASS。
原因。 指标变量是必填项:没有它们面板无法启动。
解决。 将它们补充到 /opt/xlada/.env 并重启整个栈:
METRICS_USER=xpanel
METRICS_PASS=<强密码>
docker compose up -d
节点不出现在面板中
现象。 节点已创建,但在面板中仍显示为未连接。
原因。 通常是三者之一:从面板服务器无法访问 NODE_PORT、
SECRET_KEY 没有完整复制,或者节点容器没有启动。
解决。 按顺序检查:
docker logs -f xpanel-node—— 密钥错误时节点会自己打印原因。- 从面板服务器执行:
nc -vz <节点 ip> 2222。 - 确认密钥完整粘贴,没有换行。
- 在防火墙中仅对面板的 IP 开放端口
2222。
详情见 安装节点 一节。
每个节点都有自己的 SECRET_KEY 和自己的证书。不支持多个
服务器共用同一个密钥 —— 不能把它从一个节点迁移到另一个节点。
端口冲突
现象。 容器以 address already in use 启动失败,或者节点上的
Xray 没有监听指定端口。
原因。 端口被其他进程占用:面板服务器上的 3000、3001、3010,
或者节点上的 inbound 端口。
解决。 找到占用端口的进程并释放它:
ss -tlnp | grep -E ':(3000|3001|3010|2222)\b'
如果改端口比释放端口更简单,就修改 .env 中的 APP_PORT 或
METRICS_PORT,并且别忘了更新 nginx 中的 proxy_pass。在节点上
请确认容器以 --network host 启动:端口映射会破坏
客户端真实 IP 的识别。
证书无法签发
现象。 certbot --nginx -d panel.example.com 报错退出。
原因。 域名没有指向这台服务器、80 端口被关闭,或者该域名
已被其他虚拟主机占用。
解决。
dig +short panel.example.com # 应返回面板服务器的 IP
ss -tlnp | grep ':80'
certbot certificates # 已经签发了什么
certbot renew --dry-run # 检查自动续期
核对 nginx 配置中的 server_name,然后执行 nginx -t && systemctl reload nginx。
确认自动续期定时器已启用:systemctl list-timers | grep certbot。
数据库无法启动
现象。 xpanel 等待数据库并崩溃,xpanel-db 处于 unhealthy
状态或不断重启。
原因。 最常见的是 DATABASE_URL 错误、POSTGRES_PASSWORD
与已存在的卷不一致,或者旧数据目录上的 PostgreSQL 主版本不兼容。
解决。
docker compose ps
docker compose logs --tail=100 xpanel-db
docker exec xpanel-db pg_isready -U xpanel -d xpanel
核对 POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB 和 DATABASE_URL。
不要重命名卷和服务:下次启动时 compose 会创建新的
空卷。PostgreSQL 数据目录在主版本之间不兼容,因此
升级到新版本只能通过转储和恢复来进行 —— 参见
从 Remnawave 迁移。
来自 nginx 的 502 Bad Gateway
现象。 nginx 在 https://panel.example.com 上返回 502。
原因。 proxy_pass 后面什么都没有:面板容器没有启动、没有完成
迁移,或者监听了其他端口。
解决。
docker compose ps
curl -sI http://127.0.0.1:3000
docker compose logs --tail=100 xpanel
等待日志中出现 XLADA Backend v1.1.7 和
Nest application successfully started 两行。如果改过 APP_PORT,请修正
proxy_pass http://127.0.0.1:<端口> 并重新加载 nginx。
更改 APP_SECRET 后登录失效
现象。 管理员密码不再匹配,TOTP 验证码不被 接受,活动会话被重置。
原因。 首次启动后更改了 APP_SECRET。密码哈希、JWT
和 TOTP 密钥加密都依赖它。在 .env 中留下 change_me 这个值
也会产生同样的效果。
解决。 从 .env 的备份中恢复原来的 APP_SECRET 值,并
执行 docker compose up -d。如果原值已丢失,只能通过数据库
重置来登录。密钥应提前生成(openssl rand -hex 32)并保存在
密钥管理器中 —— 参见 面板安全。