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 ok 和 test is successful,说明配置正确。
第三步:申请SSL证书
使用Let's Encrypt提供的免费SSL证书,通过Certbot工具自动申请和配置:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ai.example.com
Certbot会自动完成以下操作:
- 验证域名所有权
- 申请SSL证书
- 修改Nginx配置,添加HTTPS监听和HTTP到HTTPS的自动重定向
- 设置证书自动续期
证书默认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仓库寻求社区帮助。