OpenClaw 访问故障排查记录

2026年7月9日 server 12 分钟阅读 4 次阅读
📖 文章摘要

今天 OpenClaw 突然访问不了了,页面一直加载超时,这下正好可以实践一下运维排查流程了,附上完整记录(注:部分ip等信息已作脱敏处理,ip及端口等内容非真实数据)

一、故障概述

  • 故障时间:2026年7月9日 14:50 左右(发现时间)
  • 故障现象https://example.com/ 页面加载超时,无法打开
  • 影响范围:Web 界面无法访问
  • 解决方式:关闭本地代理开关后恢复正常
  • 恢复时间:2026年7月9日 14:55 左右
  • 根本原因:本地开了代理,干扰了浏览器的 SSL 证书吊销验证流程

二、服务器基本信息

项目 信息
云服务商 UCloud
服务器位置 香港(免备案)
公网 IP 192.0.2.1
操作系统 Ubuntu(Docker 容器部署)
SSH 端口 2222(非默认 22)
SSH 用户 ubuntu(已配密钥免密)
域名 example.com
部署服务 OpenClaw(Docker)、Nginx、Let's Encrypt SSL

三、故障时间线

14:50  - 发现 OpenClaw 网站无法访问,页面加载超时
14:51  - 开始排查,先 SSH 连接服务器
14:52  - 检查 Docker 容器状态:正常运行(healthy)
14:52  - 检查 Nginx 状态:正常运行(active)
14:53  - 检查 SSL 证书:有效(至 2026-10-06,还有 89 天)
14:53  - 测试服务器本地访问:curl http://127.0.0.1:8080/ 返回 200 ✓
14:54  - 测试外部 HTTPS 访问:从服务器访问自身域名正常
14:54  - 从客户端本地测试:curl 报错 CRYPT_E_REVOCATION_OFFLINE
14:55  - 定位问题:Windows 证书吊销检查失败
14:55  - 尝试 OCSP Stapling 方案:服务器也无法访问 OCSP 服务器
14:56  - 确认根因:本地开了代理,干扰 SSL 验证
14:56  - 关闭代理后访问恢复正常

四、排查过程

排查思路说明

遇到 Web 服务访问故障,遵循"自底向上"原则:

  1. 先确认服务端(容器/进程)是否正常运行
  2. 再确认 Web 服务器(Nginx)配置和状态
  3. 然后确认网络层面(端口、防火墙、SSL)是否通畅
  4. 最后确认客户端(本地网络、浏览器、代理)是否有问题

为什么要按这个顺序?

  • 先排除服务端问题,因为服务端挂了就不用往下查
  • 服务端正常再查网络层,因为网络是连接客户端和服务端的桥梁
  • 最后查客户端,因为客户端环境最复杂,变量最多

第一步:检查服务端状态

执行命令:

ssh -p 2222 ubuntu@192.0.2.1 "docker ps -a | grep -i openclaw"

结果:

容器名: openclaw
状态: Up 7 hours (healthy)
端口映射: 0.0.0.0:8080->8080/tcp

结论: OpenClaw 容器运行正常,healthcheck 通过

遇到的情况:

  • 容器状态显示 "healthy",说明 Docker 健康检查机制正常工作
  • 如果显示 "unhealthy" 或 "Exited",就需要进一步查看容器日志 docker logs openclaw

第二步:检查 Nginx 状态

执行命令:

sudo systemctl status nginx

结果:

Active: active (running)

结论: Nginx 服务正在运行

为什么查这个?

  • Nginx 是反向代理,负责将 HTTPS 请求转发给 OpenClaw
  • 即使容器正常,Nginx 挂了也会导致访问失败

第三步:检查 Nginx 站点配置

执行命令:

ls /etc/nginx/sites-enabled/
grep -r 'example' /etc/nginx/conf.d/
cat /etc/nginx/conf.d/example.conf

结果:

  • 配置文件:/etc/nginx/conf.d/example.conf
  • 监听 443 端口(HTTPS)
  • SSL 证书路径:/etc/letsencrypt/live/example.com/
  • 反向代理到:http://127.0.0.1:8080
  • WebSocket 支持:已配置 Upgrade 头
  • 80 端口自动跳转到 HTTPS

结论: Nginx 配置正确


第四步:检查 SSL 证书状态

执行命令:

sudo certbot certificates

结果:

Certificate Name: example.com
Expiry Date: 2026-10-06 (VALID: 89 days)

结论: SSL 证书有效,不是证书过期问题

为什么查这个?

  • 证书过期是最常见的 HTTPS 访问问题
  • 但证书有效不代表客户端能正常验证

第五步:测试服务器本地连接

执行命令:

curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/

结果: 200

结论: 服务器内部访问 OpenClaw 正常,服务本身没问题

为什么查这个?

  • 排除应用层问题
  • 如果这里都失败,说明容器内部有问题

第六步:测试外部 HTTPS 访问

执行命令(从服务器执行):

curl -s -I https://example.com/

结果: HTTP/1.1 200 OK

注意: 这个测试有局限性 - 服务器访问自己的域名走的是本地回环,不代表客户端能访问


第七步:从客户端本地测试(关键步骤)

7.1 DNS 解析测试:

nslookup example.com

结果:解析到 192.0.2.1 ✓

7.2 HTTPS 连接测试:

curl -s -o /dev/null -w '%{http_code}' https://example.com/

结果:exit code 35,返回 000

遇到的问题: curl 返回 exit code 35,这是 SSL 连接错误

查看详细错误:

curl -v https://example.com/

关键错误信息:

schannel: next InitializeSecurityContext failed:
CRYPT_E_REVOCATION_OFFLINE (0x80092013)

这个错误是什么意思?

  • Windows 使用 Schannel 作为 SSL/TLS 实现
  • Schannel 在握手时会检查证书吊销状态
  • 它会访问 OCSP 服务器(如 r3.o.lencr.org)获取吊销列表
  • 如果访问不到 OCSP 服务器,就会报 CRYPT_E_REVOCATION_OFFLINE

第八步:验证 OCSP 服务器可达性

执行命令(从客户端):

curl -s --connect-timeout 10 -I "http://r3.o.lencr.org/"

结果:无响应,连接超时

执行命令(从服务器):

curl -s --connect-timeout 10 -I "http://r3.o.lencr.org/"

结果:无响应,连接超时

结论: Let's Encrypt 的 OCSP 服务器被 GFW 封锁,客户端和服务器都无法直接访问


第九步:尝试绕过证书验证

执行命令:

curl -k --connect-timeout 10 https://example.com/

结果: 返回 200,页面内容正常

结论: 跳过证书验证后访问正常,问题确认是 SSL 证书验证失败导致


第十步:检查访问日志

执行命令:

grep 'example' /var/log/nginx/access.log | tail -20

结果:

  • IP:198.51.100.1
  • 最近访问时间:09/Jul/2026:13:56:45
  • 返回状态:200

结论: 之前一直正常访问,服务端有成功响应记录


第十一步:最终确认

最后没招了搜索了相关了情况,发现:

  1. 使用浏览器访问
  2. 页面加载超时
  3. 系统设置开启了代理,但是客户端代理软件没开启...

最终确认: 本地开了代理,代理干扰了浏览器的 SSL 证书验证流程,导致超时。关闭代理后访问正常。


五、根因分析

问题链路:

浏览器发起 HTTPS 请求
    ↓
Windows Schannel 进行 SSL 握手
    ↓
尝试访问 OCSP 服务器验证证书吊销状态
    ↓
OCSP 服务器被墙(或代理干扰验证流程)
    ↓
证书验证超时
    ↓
页面加载超时

根因: 本地开了代理,代理干扰了浏览器的 SSL 证书验证流程(可能是代理拦截了 OCSP 请求,或者代理本身响应慢)


六、解决方案

关闭代理后访问正常。


七、附:尝试的解决方案(未采用)

1. OCSP Stapling 方案

  • 原理: 让 Nginx 服务器预获取 OCSP 响应,附在证书链中返回
  • 失败原因: 服务器本身也无法访问 OCSP 服务器

2. 禁用 Windows 证书吊销检查

  • 命令: reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Crypto" /v CertificateRevocation /t REG_DWORD /d 0 /f
  • 风险: 降低安全性,不推荐

八、经验总结

1. 排查顺序很重要

服务端 → 网络层 → 客户端,从简单到复杂

2. 客户端环境要纳入考虑

代理、VPN、防火墙、杀毒软件都可能干扰网络请求。发现"访问不了",不一定是服务挂了

3. SSL 问题排查要点

  • 证书是否过期
  • 证书链是否完整
  • OCSP 服务器是否可达
  • 客户端是否做了证书验证

4. curl 是很好的排查工具

  • curl -k 跳过证书验证
  • curl -v 显示详细握手过程
  • curl -w 输出连接时间等指标

5. 国内环境特殊性

Let's Encrypt 免费证书虽然好用,但 OCSP 服务器在国内可能被墙,需要考虑 OCSP Stapling 或其他方案

6. 日志是最重要的证据

  • /var/log/nginx/access.log 能看到客户端真实请求
  • /var/log/nginx/error.log 能看到服务端错误
  • docker logs <container> 能看到应用层日志

九、附录:相关命令速查

# 检查容器状态
docker ps -a | grep <服务名>
docker logs <容器名> --tail 100

# 检查 Nginx
sudo systemctl status nginx
sudo nginx -t
sudo tail -f /var/log/nginx/error.log

# 检查 SSL 证书
sudo certbot certificates
openssl s_client -connect 域名:443 -servername 域名

# 测试网络连通性
nslookup 域名
curl -v https://域名/
curl -k https://域名/  # 跳过证书验证
telnet IP 端口

# 检查防火墙
sudo iptables -L INPUT -n
sudo ufw status

文档结束

最后更新:2026年7月9日CC BY-NC-SA 4.0

评论

暂无评论,来写第一条吧

© 2026 My Blog. Built with Nuxt.js + FastAPI.