实战

OpenClaw Trusted Proxy 反向代理认证完全指南:Nginx/Caddy 前置部署最佳实践

OpenClaw Trusted Proxy 认证模式完整教程:为什么需要反向代理(HTTPS 证书/域名绑定/统一认证入口)、trusted-proxy 认证模式的工作原理(Nginx/Caddy 负责认证,通过 X-Forwarded-User 头传递身份给 Gateway)、Nginx + Basic Auth 配置示例、Caddy + JWT 配置示例、Cloudflare Access + OpenClaw 的零信任部署方案、让反向代理与 Gateway 之间的通信保持安全(内网绑定/Unix Socket)、常见错误排查(401 循环/WebSocket 升级失败/Underscores in Headers 问题)。

2026/3/243分钟 阅读ClaudeEagle

生产环境中,OpenClaw Gateway 通常不直接对外—— 而是在前面架一层 Nginx/Caddy 等反向代理, 负责 HTTPS、域名绑定和统一认证。 这篇文章讲清楚怎么正确配置。

为什么需要反向代理?

不用反向代理: 用户 → ws://your-ip:18789(明文传输,没有 HTTPS) 用反向代理: 用户 → https://ai.example.com(HTTPS + 域名) ↓ Nginx/Caddy(认证 + 证书) ↓ ws://127.0.0.1:18789(内网 WebSocket) OpenClaw Gateway

好处

  • 自动 HTTPS 证书(Let's Encrypt)
  • 漂亮的域名,而非 IP:端口
  • 统一认证入口(Basic Auth / OAuth / SSO)
  • Gateway 只监听 localhost,不暴露到公网

Trusted Proxy 认证模式原理

1. 用户访问 https://ai.example.com 2. Nginx 验证用户身份(Basic Auth / OAuth) 3. Nginx 在请求头中添加 X-Forwarded-User: alice 4. 转发到 Gateway(ws://127.0.0.1:18789) 5. Gateway 信任这个头(trusted-proxy 模式), 认为已经过 Nginx 认证

OpenClaw 配置:

json
{
  "gateway": {
    "bind": "127.0.0.1",
    "port": 18789,
    "auth": {
      "mode": "trusted-proxy",
      "trustedProxyHeader": "X-Forwarded-User"
    }
  }
}

Nginx + Basic Auth 配置

bash
# 创建密码文件
htpasswd -c /etc/nginx/.htpasswd your-username
nginx
# /etc/nginx/sites-available/openclaw
server {
    listen 443 ssl;
    server_name ai.example.com;

    ssl_certificate /etc/letsencrypt/live/ai.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;

    # 重要:允许下划线请求头(OpenClaw Codex 需要)
    underscores_in_headers on;

    location / {
        auth_basic "OpenClaw";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # 传递认证用户名给 Gateway
        proxy_set_header X-Forwarded-User $remote_user;

        # WebSocket 升级
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_pass http://127.0.0.1:18789;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Caddy + 自动 HTTPS 配置

Caddy 自动管理 Let's Encrypt 证书,配置更简洁:

caddy
# Caddyfile
ai.example.com {
    basicauth {
        your-username JDJhJDE0JHh4eHh4eHh4eHh4eHh4eA==
    }

    reverse_proxy localhost:18789 {
        header_up X-Forwarded-User {http.auth.user.id}

        # WebSocket 支持
        transport http {
            versions h1
        }
    }
}

Caddy 自动申请和续期 HTTPS 证书,无需手动操作。

Cloudflare Access 零信任部署

使用 Cloudflare Access 做访问控制(无需密码,用 Email 一次性链接认证):

1. Cloudflare Dashboard → Access → Applications → Add 2. 域名:ai.example.com 3. Identity Provider:Email(发送一次性访问链接) 4. Policy:允许特定 Email 地址 Cloudflare Tunnel(替代 Nginx): cloudflared tunnel create openclaw cloudflared tunnel route dns openclaw ai.example.com
yaml
# config.yml
tunnel: your-tunnel-id
credentials-file: /path/to/credentials.json

ingress:
  - hostname: ai.example.com
    service: http://localhost:18789
  - service: http_status:404

OpenClaw 配置:

json
{
  "gateway": {
    "auth": {
      "mode": "trusted-proxy",
      "trustedProxyHeader": "Cf-Access-Authenticated-User-Email"
    }
  }
}

常见问题排查

问题1:WebSocket 连接失败(101 升级失败)

症状:WebChat 无法连接,控制台报 WebSocket handshake failed 原因:Nginx 没有配置 WebSocket 升级头 修复:确认 Nginx 配置中有: proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

问题2:Codex/Claude Code 长连接断开(sticky session)

症状:Codex CLI 会话频繁中断 原因:没有配置 underscores_in_headers on 修复(Nginx): 在 http {} 块中添加: underscores_in_headers on;

问题3:401 循环(一直要求认证)

症状:输入密码后仍然返回 401 原因:Basic Auth 密码文件格式错误 修复:重新生成密码 htpasswd -c /etc/nginx/.htpasswd username # 使用 bcrypt 加密,不要手动编辑密码文件

问题4:Gateway 被外网直接访问

检查 Gateway 绑定地址: openclaw gateway status 应该显示:bind: 127.0.0.1(仅 localhost) 如果是 0.0.0.0,立即修改配置: { "gateway": { "bind": "127.0.0.1" } }

来源:OpenClaw 官方文档 - docs.openclaw.ai/gateway/trusted-proxy-auth

相关文章推荐

实战OpenClaw 日志与健康检查完全指南:监控、告警与运维自动化OpenClaw 日志系统(Logging)与健康检查(Health Check)完整教程:日志级别配置(debug/info/warn/error)和日志格式(text/json)、日志文件持久化路径配置、按渠道/Agent/Provider 过滤日志、Health Check HTTP 端点(/health)的使用(状态码/响应格式)、用于容器编排的 liveness/readiness 探针配置、Gateway Doctor 命令的详细输出解读、集成 Prometheus 指标导出(/metrics 端点)、Grafana Dashboard 可视化,以及生产环境的日志轮转和告警配置方案。2026/3/25实战OpenClaw 代理配置完全指南:SOCKS5/HTTP 代理接入 Claude API 解决网络限制OpenClaw 网络代理(Proxy)配置完整教程:为什么需要代理(大陆访问 Anthropic/OpenAI API 被限制)、SOCKS5 代理配置方式(proxy.socks5/proxy.url)、HTTP/HTTPS 代理配置、代理认证(带用户名密码的代理)、按 Provider 单独配置代理(Anthropic 用代理、国内模型不走代理)、Clash/V2Ray/Xray 等代理工具与 OpenClaw 的对接方式、代理连通性测试方法,以及常见代理问题排障(SSL证书错误/超时/认证失败)。2026/3/25实战OpenClaw 密钥管理完全指南:API Key 安全存储、环境变量与 Vault 集成OpenClaw 密钥(Secrets)管理完整教程:密钥存储的三种方式对比(配置文件明文/环境变量/外部 Vault)、openclaw secrets set/get/list 命令使用、环境变量在配置中的引用语法(${ENV_VAR})、与系统 Keychain 集成(macOS Keychain/Linux Secret Service)、1Password CLI 和 HashiCorp Vault 接入方案、密钥轮换的操作流程、防止密钥泄露的检查(避免 git commit 含密钥)、以及密钥的最小权限原则(每个渠道用独立的 Token)。2026/3/25实战OpenClaw 渠道排障完全指南:消息收不到、Bot 不回复的系统性诊断方法OpenClaw 渠道故障系统性诊断教程:openclaw doctor 一键诊断命令的输出解读、最常见的 5 类问题(Bot Token 无效/Webhook URL 不可达/DM 配对未完成/网络防火墙拦截/配置格式错误)及对应修复步骤、各主要渠道的专项排障(Telegram 403/WhatsApp QR 失效/Slack 事件订阅未开启/Discord 权限不足/Matrix E2EE 设备未验证)、Gateway 日志的关键字段解读、常见错误码含义(401/403/409/429/503),以及在 Discord 社区获取技术支持的途径。2026/3/25实战OpenClaw 费用控制完全指南:Token 限制、Rate Limit 与 API 成本优化实践OpenClaw API 费用控制完整教程:每请求/每日 Token 上限配置(maxTokensPerRequest/maxTokensPerDay)、Rate Limit 限流防刷设置、每日美元预算告警(budgetAlert)、模型降级策略(高峰期自动切 Haiku 降成本)、Prompt Caching 开启减少重复 Token 消耗、各模型每百万 Token 价格对比表、Ollama 本地模型 0 成本方案,以及监控 Token 用量的 Dashboard 和日志方法。2026/3/25实战OpenClaw 与 Claude Code 协同使用实战:AI 聊天助手 + AI 编程助手的终极组合OpenClaw 与 Claude Code 协同使用的完整实战指南:两款工具的定位差异(OpenClaw=聊天AI助手框架,Claude Code=代码库直接操作的编程工具)、在 OpenClaw 中通过 exec 工具调用 Claude Code CLI(claude 命令)执行编程任务、把 OpenClaw 的 Telegram 消息转化为 Claude Code 任务(用自然语言描述→Claude Code执行→返回结果)、使用 OpenClaw Cron 定期触发 Claude Code 执行代码审查/依赖更新/测试/文档生成、CRS 代理在两者中的统一接入方案,以及常见的协同架构模式(主动触发/被动响应/定时执行)。2026/3/24