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.1UpgradeConnection 这三行缺一不可。

多服务共存

如果服务器上还跑了别的服务,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;
    }
}
这篇教程对你有帮助吗?