Nginx 反向代理
域名访问、负载均衡、WebSocket 支持
为什么要用反向代理
OpenClaw 默认跑在 3000 端口上,直接用 IP:3000 访问虽然能用,但不好看也不安全。加一层 Nginx 反向代理,就能用域名访问、共享 80/443 端口、还能做负载均衡。
而且后面要配 HTTPS 证书,也得先有 Nginx 做前端。这一步属于必经之路。
四步配好反代
1
安装 Nginx
一条命令搞定安装,Ubuntu/Debian 系统直接 apt install。装完就会自动启动,浏览器访问服务器 IP 能看到 Nginx 默认页面就说明成功了。
2
配置反代规则
写一个 Nginx 配置文件,把域名请求转发到 OpenClaw 的 3000 端口。重点是 WebSocket 的配置,不然实时功能用不了。
3
测试配置
改完配置一定要先测试语法,没问题了再 reload。直接 restart 的话,配置有错整个 Nginx 就挂了。
4
设置自动启动
确保服务器重启后 Nginx 能自动拉起来,别每次重启都得手动开。
安装 Nginx
安装 Nginx
# Ubuntu / Debian
sudo apt update
sudo apt install -y nginx
# 确认安装成功
nginx -v
# 检查运行状态
sudo systemctl status nginx
# 设置开机自启
sudo systemctl enable nginx
Nginx 配置文件
这是完整的反代配置,包含了 WebSocket 支持。把下面的内容保存到 /etc/nginx/sites-available/openclaw:
nginx.conf — OpenClaw 反代配置
upstream openclaw_backend {
server 127.0.0.1:3000;
# 如果有多个实例,可以加更多 server 做负载均衡
# server 127.0.0.1:3001;
# server 127.0.0.1:3002;
}
server {
listen 80;
server_name openclaw.example.com; # 换成你的域名
# 日志
access_log /var/log/nginx/openclaw_access.log;
error_log /var/log/nginx/openclaw_error.log;
# 请求体大小限制(上传文件用)
client_max_body_size 50m;
# 反向代理
location / {
proxy_pass http://openclaw_backend;
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;
# WebSocket 支持 —— 这几行很关键!
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置(AI 响应可能比较慢)
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_connect_timeout 60s;
}
# 健康检查端点
location /health {
proxy_pass http://openclaw_backend/health;
access_log off;
}
}
启用配置并测试
启用站点配置
# 创建软链接启用站点
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
# 删除默认站点(可选)
sudo rm /etc/nginx/sites-enabled/default
# 测试配置语法 —— 一定要先测!
sudo nginx -t
# 应该看到: syntax is ok / test is successful
# 重新加载配置(不会中断已有连接)
sudo nginx -s reload
# 如果改了端口相关的配置,需要完全重启
# sudo systemctl restart nginx
WebSocket 配置千万别漏掉。OpenClaw 的实时对话、流式输出都依赖 WebSocket。如果你配反代之后发现对话卡住不动、或者消息不实时显示,十有八九是 WebSocket 没配对。上面配置里
proxy_http_version 1.1、Upgrade、Connection 这三行缺一不可。
多服务共存
如果服务器上还跑了别的服务,Nginx 可以根据域名分别转发:
多域名多服务示例
# OpenClaw
server {
listen 80;
server_name openclaw.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# 另一个服务
server {
listen 80;
server_name other.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}