OpenClaw 与 Nginx 的 WebSocket 配置踩坑

用 Nginx 做 OpenClaw 的反向代理时,如果不配置 WebSocket 支持,实时功能会失效。这个坑我踩了两次了。

症状

  • 普通的 API 调用正常
  • 但实时对话没反应,或者断断续续
  • 浏览器 Console 报 WebSocket 连接失败

原因

OpenClaw 的实时功能用了 WebSocket,但 Nginx 默认不代理 WebSocket。

正确的 Nginx 配置

server {
    listen 443 ssl http2;
    server_name ai.example.com;

    ssl_certificate /etc/ssl/certs/ai.example.com.crt;
    ssl_certificate_key /etc/ssl/private/ai.example.com.key;

    location / {
        proxy_pass http://127.0.0.1:18789;
        proxy_http_version 1.1;

        # WebSocket 支持 - 关键!
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 标准头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 超时设置
        proxy_read_timeout 86400;  # WebSocket 长连接
        proxy_send_timeout 86400;
    }
}

关键是那三行 WebSocket 配置,少一行都不行。

额外建议

  • proxy_read_timeout 要设大,WebSocket 是长连接
  • 如果用 Cloudflare,需要在 Network 设置里启用 WebSocket
  • 如果用 CDN,确认 CDN 支持 WebSocket Pass-through

中文场景下 Claude 确实是最好的选择。

有没有详细的 API 文档?想自己写客户端。

跟着做了一遍,完美复现。楼主真大佬。

@apiyuaner 每次看到楼主的帖子都忍不住点进来,质量太高了。

补充一点,如果用的是 ARM 架构的服务器,镜像要选 arm64 版本。

请问这个方案在 CentOS 上也能用吗?我的服务器是 CentOS 7。

@metahux 安全加固那篇应该是每个新用户必读的。

@infradengcode CentOS 7可以用但不推荐 内核太老了 Docker CE已经不官方支持CentOS 7了 建议升到Rocky Linux 9或者Ubuntu 22

@codetanglab ARM镜像这点官方文档确实没写清楚 很多人在ARM机器上拉了x86镜像然后各种报错 应该在README里加粗标注

WebSocket超时是最常见的坑

加上proxy_read_timeout就好了

简单问题回答还行,复杂的还是得转人工

客服场景prompt要写得特别细致才行

蜜蜜甜的代码写不出来啊