部署 CRS 之后,日常运维和安全维护同样重要。本文整理常见故障的排查方法, 以及让服务长期稳定运行的最佳实践。
⚠️ 首要任务:安全漏洞修复
CRS v1.1.248 及以下版本存在严重安全漏洞: 管理员认证绕过漏洞,攻击者可以未经授权访问管理面板, 泄露所有 API Key 和 Claude 账户信息。
立即执行更新:
bash
# Docker 部署
docker compose pull
docker compose up -d
# 验证版本
docker exec claude-relay-service cat package.json | grep version
# 或直接迁移到 CRS 2.0(sub2api)
# https://github.com/Wei-Shaw/sub2api常见故障排查
故障 1:Claude 账户频繁出现 503 错误
症状:账户列表显示「不可路由」,频繁收到 503 响应
原因:
- Claude 账号触发速率限制(使用太频繁)
- 账号被 Claude 临时限流(多账号共用 IP 被识别)
解决:
bash
# 1. 在管理面板找到异常账号,点「重置状态」
# 2. 查看账号的冷却配置
# 3. 如果频繁触发,适当增大冷却时间
# 配置更宽松的冷却策略(.env)
UPSTREAM_ERROR_503_TTL_SECONDS=300 # 503 冷却 5 分钟(默认可能更短)
UPSTREAM_ERROR_5XX_TTL_SECONDS=180 # 5xx 冷却 3 分钟
UPSTREAM_ERROR_OVERLOAD_TTL_SECONDS=60 # 过载冷却 1 分钟预防:给每个 Claude 账号配置独立的静态代理 IP, 避免多账号共用一个 IP 被 Claude 识别为异常。
故障 2:服务无响应 / 容器崩溃
bash
# 查看容器状态
docker compose ps
# 查看错误日志
docker compose logs crs --tail=100
# 重启服务
docker compose restart crs
# 如果 Redis 有问题
docker compose restart redis
docker compose restart crs故障 3:添加 Claude 账号失败
症状:点「生成授权链接」后无法完成 OAuth,或 Code 无效
解决:
- 确保用于授权的网络能访问
claude.ai(需要科学上网) - Authorization Code 有时效性,复制后立刻粘贴,不要拖太久
- 如果仍然失败,检查服务器时间是否准确:
timedatectl status
故障 4:Claude Code 客户端连接失败
bash
# 检查环境变量是否生效
echo $ANTHROPIC_BASE_URL
echo $ANTHROPIC_AUTH_TOKEN
# 直接测试 CRS 接口
curl -X POST https://你的域名/api/messages -H "Authorization: Bearer 你的API-Key" -H "Content-Type: application/json" -H "anthropic-version: 2023-06-01" -d '{"model":"claude-haiku-3-5","max_tokens":100,"messages":[{"role":"user","content":"hi"}]}'故障 5:Nginx 反向代理后 Codex 无法使用
原因:Nginx 默认丢弃带下划线的请求头(session_id)
修复:
nginx
http {
underscores_in_headers on; # 加这一行!
server {
# ... 其他配置
}
}安全加固清单
1. 更改默认管理员密码
bash
# 查看当前密码
cat ./data/init.json
# 在管理面板修改密码(Settings → 账号安全)
# 或重新部署时通过环境变量预设强密码
ADMIN_PASSWORD=$(openssl rand -base64 24)
echo "新密码:$ADMIN_PASSWORD"2. 限制管理面板访问 IP
nginx
location /web {
# 只允许你的 IP 访问管理面板
allow 你的IP地址;
deny all;
proxy_pass http://127.0.0.1:3000;
}
location / {
# API 端点正常开放
proxy_pass http://127.0.0.1:3000;
}3. 定期更新
bash
# 设置自动更新检查(每周)
cat > /etc/cron.weekly/update-crs << 'EOF'
#!/bin/bash
cd /path/to/crs
docker compose pull
docker compose up -d
EOF
chmod +x /etc/cron.weekly/update-crs4. 数据备份
bash
# 定期备份 data/ 目录(含账号信息、API Key)
# 每天凌晨 3 点备份
crontab -e
# 添加:
0 3 * * * tar -czf /backup/crs-data-$(date +%Y%m%d).tar.gz /path/to/crs/data/ && find /backup/ -name "crs-data-*.tar.gz" -mtime +7 -delete监控告警配置
使用 UptimeRobot(免费)
- 注册 UptimeRobot
- 添加监控:
https://你的域名/health,间隔 5 分钟 - 配置告警:服务宕机时发邮件/Telegram 通知
自建简单监控脚本
bash
cat > /usr/local/bin/crs-healthcheck << 'EOF'
#!/bin/bash
HEALTH_URL="http://localhost:3000/health"
TG_TOKEN="你的TG-Bot-Token"
TG_CHAT="你的Chat-ID"
response=$(curl -sf $HEALTH_URL)
if [ $? -ne 0 ]; then
curl -s "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" -d "chat_id=${TG_CHAT}" -d "text=🚨 CRS 服务异常!请立即检查"
fi
EOF
chmod +x /usr/local/bin/crs-healthcheck
# 每 5 分钟检查一次
echo "*/5 * * * * /usr/local/bin/crs-healthcheck" | crontab -性能调优建议
多账号 + IP 隔离(最优配置)
账号 A + 代理 IP 1(美国 ISP 住宅 IP)
账号 B + 代理 IP 2(不同 ISP)
账号 C + 直连(服务器 IP)
优点:不同账号来自不同 IP,极大降低被识别为同一用户的风险
冷却时间调优
bash
# 轻量使用场景(不需要太频繁)
UPSTREAM_ERROR_503_TTL_SECONDS=600 # 10 分钟冷却
UPSTREAM_ERROR_5XX_TTL_SECONDS=300 # 5 分钟冷却
# 高频使用场景(需要快速恢复)
UPSTREAM_ERROR_503_TTL_SECONDS=120 # 2 分钟冷却
UPSTREAM_ERROR_5XX_TTL_SECONDS=60 # 1 分钟冷却来源:CRS GitHub 项目 - https://github.com/Wei-Shaw/claude-relay-service