OpenClaw 配置 Nginx 反向代理完整指南

OpenClaw 配置 Nginx 反向代理完整指南

OpenClaw 配置 Nginx 反向代理完整指南

将 OpenClaw Gateway 安全地暴露到公网,并通过 HTTPS 和登录保护确保访问安全。

前言

OpenClaw 是一个强大的 AI 助手网关,默认情况下它只监听本地回环地址 (127.0.0.1:18789)。如果你想从外部网络访问 Control UI,或者为团队提供安全的访问入口,配置 Nginx 反向代理是最佳实践。

本文将介绍如何:

  • ✅ 配置 Nginx 反向代理到 OpenClaw
  • ✅ 启用 HTTPS (Let’s Encrypt SSL 证书)
  • ✅ 添加 Basic Auth 登录保护
  • ✅ 配置 OpenClaw 信任代理模式

环境准备

  • 服务器: CentOS Stream 9 / Ubuntu 20.04+ / Debian 10+
  • 域名: 已解析到服务器 IP(本文以 www.zhonghongwei.site 为例)
  • OpenClaw: 已安装并运行在本地模式
  • 端口: 80/443 未被占用

步骤一:安装 Nginx 和 Certbot

# CentOS/RHELsudo dnf install-y nginx certbot python3-certbot-nginx # Ubuntu/Debiansudoapt update sudoaptinstall-y nginx certbot python3-certbot-nginx # 启动 Nginxsudo systemctl start nginx sudo systemctl enable nginx 

步骤二:配置 OpenClaw 信任代理模式

编辑 ~/.openclaw/openclaw.json,在 gateway 部分添加以下配置:

{"gateway":{"port":18789,"mode":"local","bind":"loopback","trustedProxies":["127.0.0.1"],"auth":{"mode":"trusted-proxy","trustedProxy":{"userHeader":"x-forwarded-user","requiredHeaders":["x-forwarded-proto","x-forwarded-host"]}},"controlUi":{"allowedOrigins":["https://www.zhonghongwei.site"]}}}

关键参数说明

参数说明
bind: "loopback"只监听本地地址,禁止外部直接访问
trustedProxies信任的代理服务器 IP,此处为 Nginx
mode: "trusted-proxy"启用信任代理认证模式
userHeaderNginx 传递用户身份的 Header
allowedOrigins允许的 Control UI 来源域名

重启 OpenClaw Gateway:

openclaw gateway restart 

步骤三:配置 Nginx 反向代理

创建 /etc/nginx/conf.d/openclaw.conf

# OpenClaw Nginx 配置 # HTTP 重定向到 HTTPS server { listen 80; server_name www.zhonghongwei.site; return 301 https://$host$request_uri; } # HTTPS 服务 server { listen 443 ssl http2; server_name www.zhonghongwei.site; # SSL 证书路径(步骤四会自动配置) ssl_certificate /etc/letsencrypt/live/www.zhonghongwei.site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.zhonghongwei.site/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 安全响应头 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; # 日志配置 access_log /var/log/nginx/openclaw-access.log; error_log /var/log/nginx/openclaw-error.log; location / { # WebSocket 支持(必需) proxy_pass http://127.0.0.1:18789; # 核心:这里清空认证头防止冲突 proxy_set_header Authorization ""; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 转发用户身份(信任代理模式必需) proxy_set_header X-Forwarded-User $remote_user; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 超时设置(WebSocket 长连接) proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 86400s; proxy_buffering off; } } 

测试并重载配置:

nginx -t nginx -s reload 

步骤四:申请 SSL 证书

使用 Let’s Encrypt 免费证书:

# 申请证书sudo certbot --nginx-d www.zhonghongwei.site # 测试自动续期sudo certbot renew --dry-run 

Certbot 会自动:

  • 生成 SSL 证书
  • 修改 Nginx 配置添加证书路径
  • 设置自动续期任务

步骤五:添加登录保护(可选但强烈建议)

为了防止未授权访问,建议添加 Basic Auth 登录。

1. 创建密码文件

# 创建账号密码(用户名: admin)sudosh-c'echo "admin:$(openssl passwd -apr1 你的密码)" > /etc/nginx/.htpasswd'# 添加更多用户sudosh-c'echo "用户名:$(openssl passwd -apr1 密码)" >> /etc/nginx/.htpasswd'

2. 启用 Basic Auth

在 Nginx 配置中添加两行:

server { listen 443 ssl http2; server_name www.zhonghongwei.site; # 添加登录保护 auth_basic "OpenClaw Login"; auth_basic_user_file /etc/nginx/.htpasswd; location / { # ... 原有配置 } } 

重载 Nginx:

sudo nginx -t&&sudo systemctl reload nginx 

验证部署

访问 https://www.zhonghongwei.site,你应该看到:

  1. 🔒 浏览器显示安全锁(SSL 生效)
  2. 📝 弹出登录框(Basic Auth)
  3. 🤖 登录后进入 OpenClaw Control UI

常见问题

1. “origin not allowed” 错误

原因: allowedOrigins 配置不匹配
解决: 在 openclaw.json 中添加你的访问地址:

"allowedOrigins":["https://www.zhonghongwei.site"]

2. WebSocket 连接失败 (1008 unauthorized)

原因: 缺少必要的转发 Headers
解决: 确保 Nginx 配置中包含:

proxy_set_header X-Forwarded-User $remote_user; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; 

3. 证书续期失败

检查:

sudo certbot certificates sudo certbot renew --dry-run 

手动续期:

sudo certbot renew sudo systemctl reload nginx 

安全建议

  1. 定期更换密码: 建议每 3-6 个月更换一次 Basic Auth 密码
  2. 限制访问来源: 如需更高安全性,可在 Nginx 中添加 IP 白名单

访问日志监控: 定期检查异常访问

sudotail-f /var/log/nginx/openclaw-access.log 

防火墙设置: 只开放 80/443 端口,禁止外部访问 18789

sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload

总结

通过本文的配置,你已经完成了:

  • ✅ OpenClaw 信任代理模式配置
  • ✅ Nginx 反向代理 + HTTPS
  • ✅ Let’s Encrypt SSL 证书
  • ✅ Basic Auth 登录保护

现在你可以安全地从任何地方访问你的 OpenClaw Control UI 了!


相关链接:

配置文件备份:

  • ~/.openclaw/openclaw.json
  • /etc/nginx/conf.d/openclaw.conf
  • /etc/nginx/.htpasswd

小技巧:直接把这个博客内容发给openclaw,让它帮你配置。

Read more

深入剖析:按下 F5 后,浏览器前端究竟发生了什么?

深入剖析:按下 F5 后,浏览器前端究竟发生了什么?

文章目录 * 概述 * 一、关键前提:三种导航方式的本质区别 * 二、核心概念:强缓存 vs 协商缓存 * 1. 强缓存(Strong Caching) * 2. 协商缓存(Revalidation Caching) * 三、F5 刷新全景流程图 * 四、F5 刷新的完整生命周期详解 * 阶段一:主文档(HTML)的缓存验证与获取 * 阶段二:HTML 解析与渲染流水线(Critical Rendering Path) * 阶段三:子资源(CSS/JS/IMG)的缓存处理 * 五、对比总结:F5 与其他操作的本质差异 * 六、给前端开发者的实践建议 * 七、结语 概述 在前端开发中,

前端组件库:别再重复造轮子了

前端组件库:别再重复造轮子了 毒舌时刻 这组件写得跟拼凑似的,一点都不统一。 各位前端同行,咱们今天聊聊前端组件库。别告诉我你还在手动编写所有组件,那感觉就像在没有工具的情况下盖房子——能盖,但效率低得可怜。 为什么你需要组件库 最近看到一个项目,每个组件都要手动编写,样式不统一,维护困难。我就想问:你是在做组件还是在做重复劳动? 反面教材 // 反面教材:手动编写组件 // Button.jsx import React from 'react'; function Button({ children, onClick }) { return ( <button onClick={onClick} style={{ padding: '10px 20px', backgroundColor: '#007bff', color: '

【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

感谢Qwen3-Coder-Next-FP8为本文进行润色,调整,绘制架构图。但是所有的文字及链接经过手工修订。需要SGLang推理框架,移步 【DGX Spark 实战】部署SGLang,千问3.5-27B模型初探 我们已严格按您提供的原始内容(包括 CUDA_VERSION=130、CPU_ARCH=aarch64、路径 ~/vllm、用户 admin 等)进行全量修正与标准化,确保所有命令与 DGX Spark 实际环境一致。 摘要本文详细记录在 NVIDIA DGX Spark(Grace Blackwell 架构)上部署 vLLM 推理服务并接入 Open WebUI 的完整流程,包含 FlashAttention 编译、vLLM wheel 安装、Qwen3-Coder-Next-FP8

《Web 自动化测试入门:从概念到百度搜索实战全拆解》

《Web 自动化测试入门:从概念到百度搜索实战全拆解》

一、自动化的核心概念 1. 定义:通过自动方式替代人工操作完成任务,生活中常见案例(自动洒水机、自动洗手液、超市闸机)体现了 “减少人力消耗、提升效率 / 质量” 的特点。 2. 软件自动化测试的核心目的: * 用于回归测试:软件迭代新版本时,验证新增功能是否影响历史功能的正常运行。 3. 常见面试题解析: * 自动化测试不能完全取代人工测试:需人工编写脚本,且功能变更后需维护更新,可靠性未必优于人工。 * 自动化测试不能 “大幅度降低工作量”:仅能 “一定程度” 减少重复工作,需注意表述的严谨性。 二、自动化测试的分类 自动化是统称,包含多种类型,核心分类及说明如下: 分类说明接口自动化针对软件接口的测试,目的是验证接口的功能、性能、稳定性等。UI 自动化 针对软件界面的测试,包含: 1. 移动端自动化:通过模拟器在电脑上编写脚本,测试手机应用;稳定性较差(受设备、