首页 教程 分类 Skills下载 关于
ZH EN JA KO
安全运维

OpenClaw Nginx反向代理和SSL配置教程

· 7 分钟

OpenClaw的网关服务默认运行在18789端口上,出于安全考虑,官方明确建议永远不要将该端口直接暴露到公网。正确的做法是使用Nginx作为反向代理,在前端处理SSL加密和访问控制,再将请求转发给OpenClaw网关。本教程将完整讲解这一部署流程。

为什么需要反向代理

直接暴露OpenClaw的18789端口存在多重风险:

  • 无加密传输: 网关默认使用HTTP,聊天内容和API密钥可能被中间人截获
  • 缺乏访问控制: 任何人都可以尝试访问你的网关接口
  • 无法使用域名: 许多聊天平台的Webhook要求HTTPS地址

通过Nginx反向代理,你可以获得SSL加密、请求过滤、速率限制等多重保护。详细的安全建议请参考OpenClaw官方文档。

前置条件

  • 一台已部署OpenClaw的Linux服务器(推荐Ubuntu 22.04/24.04)
  • 一个已解析到服务器IP的域名(例如 ai.example.com
  • OpenClaw网关已在本地正常运行

第一步:安装Nginx

sudo apt update
sudo apt install -y nginx

确认Nginx已启动:

sudo systemctl status nginx
sudo systemctl enable nginx

第二步:创建Nginx配置文件

为OpenClaw创建一个专用的Nginx站点配置:

sudo nano /etc/nginx/sites-available/openclaw

写入以下配置内容:

upstream openclaw_gateway {
    server 127.0.0.1:18789;
    keepalive 64;
}

server {
    listen 80;
    server_name ai.example.com;

    # 后续certbot会自动添加HTTPS重定向
    location / {
        proxy_pass http://openclaw_gateway;
        proxy_http_version 1.1;

        # WebSocket支持(OpenClaw部分功能依赖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;

        # 超时设置(AI生成可能需要较长时间)
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;

        # 缓冲设置
        proxy_buffering off;
        proxy_cache off;
    }
}

启用该站点配置:

sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
sudo nginx -t  # 检查配置语法
sudo systemctl reload nginx

nginx -t 命令会验证配置文件语法,如果显示 syntax is oktest is successful,说明配置正确。

第三步:申请SSL证书

使用Let's Encrypt提供的免费SSL证书,通过Certbot工具自动申请和配置:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ai.example.com

Certbot会自动完成以下操作:

  1. 验证域名所有权
  2. 申请SSL证书
  3. 修改Nginx配置,添加HTTPS监听和HTTP到HTTPS的自动重定向
  4. 设置证书自动续期

证书默认90天有效,Certbot会自动设置定时任务进行续期。你可以手动验证续期是否正常:

sudo certbot renew --dry-run

第四步:配置OpenClaw可信代理

使用反向代理后,OpenClaw需要知道哪些代理是可信的,以便正确获取客户端的真实IP地址。编辑OpenClaw配置:

nano ~/.config/openclaw/openclaw.json5

添加可信代理配置:

{
  gateway: {
    // 信任来自本机Nginx的请求
    trustedProxies: ["127.0.0.1", "::1"],
    // 绑定到本地,不再监听外部请求
    host: "127.0.0.1",
    port: 18789,
  }
}

host 设置为 127.0.0.1 可以确保网关只接受来自本机的连接,即使防火墙配置有误,外部也无法直接访问18789端口。

重启网关使配置生效:

openclaw gateway restart

第五步:配置防火墙

使用UFW确保只开放必要的端口:

sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP(用于证书验证和重定向)
sudo ufw allow 443/tcp   # HTTPS
sudo ufw deny 18789/tcp  # 明确拒绝直接访问网关端口
sudo ufw enable
sudo ufw status

第六步:验证完整链路

全部配置完成后,进行端到端验证:

# 检查Nginx是否正常代理
curl -I https://ai.example.com

# 检查OpenClaw网关状态
openclaw doctor

# 确认18789端口未对外开放
# 从另一台机器执行:
curl http://你的服务器IP:18789  # 应该连接被拒绝

进阶:添加速率限制

为了防止滥用,可以在Nginx中添加速率限制。在 http 块(通常在 /etc/nginx/nginx.conf)中添加:

# 定义限流区域
limit_req_zone $binary_remote_addr zone=openclaw_limit:10m rate=10r/s;

然后在站点配置的 location 块中引用:

location / {
    limit_req zone=openclaw_limit burst=20 nodelay;
    proxy_pass http://openclaw_gateway;
    # ... 其他配置保持不变
}

这将每个IP的请求频率限制在每秒10次,允许突发20次请求。

总结

通过Nginx反向代理和SSL证书,你的OpenClaw网关现在有了可靠的安全保障。所有通信都经过加密,网关端口不再暴露,还可以灵活添加各种Nginx的安全特性。如果你使用Caddy等其他Web服务器,配置思路类似,具体语法请参考OpenClaw官方文档中的部署指南。遇到配置问题可以前往OpenClaw GitHub仓库寻求社区帮助。

OpenClaw 是开源免费的个人AI助手,支持 WhatsApp、Telegram、Discord 等多平台接入