Clawdbot+Qwen3:32B企业级部署:Nginx反向代理+HTTPS+Basic Auth三层安全加固方案

1. 为什么需要三层安全加固?

Clawdbot 是一个统一的 AI 代理网关与管理平台,旨在为开发者提供一个直观的界面来构建、部署和监控自主 AI 代理。通过集成的聊天界面、多模型支持和强大的扩展系统,Clawdbot 让 AI 代理的管理变得简单高效。

但当你把这样一个功能强大的平台部署在公网环境时,问题就来了:默认的本地访问方式(如 http://localhost:3000)没有任何防护机制;直接暴露 Ollama 的 API 地址(http://127.0.0.1:11434/v1)意味着任何人都可能绕过前端,直连后端大模型服务;而像 ?token=csdn 这样的 URL 参数式认证,既不安全也不符合企业级访问规范。

更现实的问题是——你不会希望自己的 Qwen3:32B 模型被外部随意调用,消耗显存、拖慢响应,甚至被用于生成违规内容。尤其当它运行在 24G 显存的 GPU 实例上时,一次恶意批量请求就可能导致服务不可用。

所以,真正的生产部署,不能只停留在“能跑起来”,而要回答三个关键问题:

  • 外部用户如何安全地访问前端界面?
  • 如何防止未授权用户直连后端模型 API?
  • 如何让整个通信过程具备身份验证、加密传输和访问控制能力?

答案就是:Nginx 反向代理 + HTTPS + Basic Auth 三层叠加防护。这不是炫技,而是把一道敞开的玻璃门,换成带指纹锁、防弹玻璃和门禁记录的智能入口。

这三层不是简单堆砌,而是环环相扣:
Nginx 做流量入口和路径分发,隐藏真实服务地址;
HTTPS 加密所有传输数据,防止 token 和对话内容被中间人窃取;
Basic Auth 在最外层拦截非法访问,连登录页面都看不到,更别说调用 API。

接下来,我会带你一步步完成这套方案的落地——不讲抽象概念,只给可复制、可验证、可运维的实操步骤。

2. 环境准备与服务启动

2.1 基础依赖确认

确保你的服务器已安装以下组件(以 Ubuntu 22.04 为例):

  • Docker(Clawdbot 官方推荐容器化部署)
  • Ollama(v0.3.0+,已预装 qwen3:32b 模型)
  • Nginx(v1.18+,系统源或官方 repo 安装即可)
  • Certbot(用于自动申请 HTTPS 证书)

你可以用以下命令快速检查:

# 检查 Docker 和 Ollama
docker --version
ollama --version

# 检查 Nginx 是否运行
sudo systemctl is-active nginx

# 检查 Certbot
certbot --version

注意:Clawdbot 默认监听 localhost:3000,Ollama 默认监听 localhost:11434。二者都不对外暴露端口,这是安全前提。所有公网访问必须经由 Nginx 统一入口。

2.2 启动 Clawdbot 与 Ollama 服务

Clawdbot 提供了开箱即用的启动命令。请在项目根目录执行:

# 启动网关(Clawdbot 服务)
clawdbot onboard

该命令会自动拉起前端服务(Node.js)、内部代理服务,并连接本地 Ollama。启动成功后,你会看到类似日志:

✔ Clawdbot server started on http://localhost:3000
✔ Connected to Ollama at http://127.0.0.1:11434
✔ Model "qwen3:32b" loaded and ready

此时,你在本机浏览器打开 http://localhost:3000 可正常访问,但切勿直接将 3000 或 11434 端口映射到公网

同时,请确认 Ollama 已加载 qwen3:32b 模型:

ollama list
# 应输出包含:
# qwen3:32b        latest      b9a5c6e7f1d2    32.4 GB

如果尚未拉取,运行 ollama pull qwen3:32b 即可。注意:该模型在 24G 显存下可运行,但建议预留至少 4G 显存余量保障稳定性。

2.3 域名与 DNS 准备

HTTPS 必须绑定有效域名。你需要一个已解析到当前服务器 IP 的二级域名,例如:

  • ai.yourcompany.com
  • clawdbot.example.net
  • gateway.myai.dev

在 DNS 控制台中,添加一条 A 记录,指向你的服务器公网 IP。等待 DNS 生效(通常几分钟内),再进行下一步。

小贴士:开发测试阶段可用 nip.io 免费临时域名,如 ai.123.45.67.89.nip.io,Certbot 支持自动验证。

3. Nginx 反向代理配置详解

3.1 创建独立配置文件

不要修改 /etc/nginx/sites-enabled/default,而是新建一个专用配置:

sudo nano /etc/nginx/conf.d/clawdbot.conf

填入以下内容(请将 ai.yourcompany.com 替换为你的真实域名):

upstream clawdbot_backend {
    server 127.0.0.1:3000;
}

upstream ollama_api {
    server 127.0.0.1:11434;
}

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

    # 强制跳转 HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name ai.yourcompany.com;

    # SSL 证书路径(由 Certbot 自动配置)
    ssl_certificate /etc/letsencrypt/live/ai.yourcompany.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.yourcompany.com/privkey.pem;

    # SSL 安全增强(推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # 前端主应用(Clawdbot UI)
    location / {
        proxy_pass http://clawdbot_backend;
        proxy_http_version 1.1;
        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;
        proxy_cache_bypass $http_upgrade;
    }

    # 仅允许通过 /api 路径访问 Ollama(关键!)
    location /api/ {
        auth_basic "Clawdbot Admin Access";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_pass http://ollama_api/;
        proxy_http_version 1.1;
        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;
        proxy_redirect off;

        # 防止跨域滥用(仅允许来自本域的请求)
        add_header 'Access-Control-Allow-Origin' 'https://ai.yourcompany.com' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
    }

    # 健康检查接口(供监控使用)
    location /healthz {
        return 200 "OK";
        add_header Content-Type text/plain;
    }
}

这个配置做了四件关键事:

  1. 双 upstream 分离clawdbot_backend 指向前端,ollama_api 指向模型 API,物理隔离;
  2. HTTP → HTTPS 强制跳转:所有明文请求自动升级;
  3. 前端 / 全量代理:用户访问 https://ai.yourcompany.com/ 即进入 Clawdbot 界面;
  4. API 接口 /api/ 单独设防:必须通过 Basic Auth 才能访问,且只放行指定 Origin。

3.2 生成 Basic Auth 用户凭证

Nginx 使用 Apache 风格的 .htpasswd 文件做基础认证。生成管理员账号:

# 安装工具(Ubuntu)
sudo apt install -y apache2-utils

# 创建密码文件(首次运行用 -c 参数)
sudo htpasswd -c /etc/nginx/.htpasswd admin

# 输入两次密码(例如:Cl@wD3v2024)
# 输出:admin:$apr1$abc123...(已加密)

你也可以添加多个用户:sudo htpasswd /etc/nginx/.htpasswd devuser

3.3 测试并重载 Nginx

检查语法是否正确:

sudo nginx -t

若输出 syntax is ok,则重载配置:

sudo systemctl reload nginx

此时,访问 http://ai.yourcompany.com 会自动跳转至 https://ai.yourcompany.com,并弹出用户名/密码输入框——说明 Basic Auth 已生效。

4. HTTPS 证书自动签发与续期

4.1 使用 Certbot 获取免费证书

安装 Certbot 并运行:

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

按提示操作,Certbot 会自动:

  • 验证域名所有权(通过 HTTP 挑战);
  • 申请 Let’s Encrypt 证书;
  • 修改 Nginx 配置,注入证书路径;
  • 设置自动续期定时任务(systemctl list-timers | grep certbot 可查)。

成功后,你会看到 Congratulations! Your certificate and chain have been saved.

4.2 手动验证 HTTPS 是否生效

打开浏览器,访问 https://ai.yourcompany.com,地址栏应显示绿色锁图标,点击可查看证书详情,颁发者为 “Let’s Encrypt”。

同时,在终端用 curl 验证:

curl -I https://ai.yourcompany.com
# 应返回 HTTP/2 200,且包含 Server: nginx 字样

4.3 验证 API 路径受保护

尝试直接访问 Ollama 原生 API(应被拦截):

curl http://ai.yourcompany.com/api/tags
# 返回 401 Unauthorized

带上 Basic Auth 头再试(需 Base64 编码 admin:Cl@wD3v2024):

echo -n 'admin:Cl@wD3v2024' | base64
# 输出:YWRtaW46Q0xAZ0QzdjIwMjQ=

curl -H "Authorization: Basic YWRtaW46Q0xAZ0QzdjIwMjQ=" \
     https://ai.yourcompany.com/api/tags
# 正常返回 JSON 列表,含 qwen3:32b

这证明:只有带合法凭证的请求,才能穿透 Nginx 访问到 Ollama。

5. Clawdbot 前端适配与 Token 安全改造

5.1 修改 Clawdbot 的 API 基地址

Clawdbot 默认从 http://localhost:11434/v1 调用模型,但在 Nginx 代理后,它必须改用 /api/ 路径。编辑 Clawdbot 的配置文件(通常为 config.json 或环境变量):

{
  "my-ollama": {
    "baseUrl": "https://ai.yourcompany.com/api",
    "apiKey": "ollama",
    "api": "openai-completions",
    "models": [
      {
        "id": "qwen3:32b",
        "name": "Production Qwen3 32B",
        "reasoning": false,
        "input": ["text"],
        "contextWindow": 32000,
        "maxTokens": 4096,
        "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
      }
    ]
  }
}

关键变化:

  • baseUrlhttp://127.0.0.1:11434/v1https://ai.yourcompany.com/api
  • 移除 /v1 后缀(因 Nginx 的 location /api/ 已自动补全)

重启 Clawdbot 使配置生效。

5.2 彻底弃用 URL Token,启用 Header 认证

原始方案中 ?token=csdn 是严重安全隐患:URL 会被浏览器历史、代理日志、CDN 缓存等明文记录。我们必须将其升级为标准 Header 认证。

在 Clawdbot 的前端代码中(如 src/services/api.ts),找到请求拦截器,添加 Authorization 头:

// 示例:Axios 请求拦截器
axios.interceptors.request.use((config) => {
  const token = localStorage.getItem('clawdbot_token') || 'ollama';
  config.headers.Authorization = `Bearer ${token}`;
  return config;
});

后端(Clawdbot 网关层)需验证该 Bearer Token。若你使用的是开源版 Clawdbot,可在其路由中间件中加入:

// 伪代码示意
app.use('/api/', (req, res, next) => {
  const auth = req.headers.authorization;
  if (!auth || !auth.startsWith('Bearer ')) {
    return res.status(401).json({ error: 'Missing or invalid Bearer token' });
  }
  const token = auth.split(' ')[1];
  if (token !== 'ollama') { // 实际应对接 Redis 或 JWT 校验
    return res.status(403).json({ error: 'Invalid token' });
  }
  next();
});

此时,https://ai.yourcompany.com/?token=csdn 已完全失效,所有 API 调用必须携带 Authorization: Bearer ollama

5.3 登录流程重构(可选但推荐)

为提升体验,可将 Basic Auth 与前端登录融合:

  • 用户首次访问 https://ai.yourcompany.com,输入 Nginx 层账号(admin);
  • Clawdbot 前端检测到认证成功后,自动设置 localStorage.clawdbot_token = 'ollama'
  • 后续所有模型请求自动携带该 token;
  • 管理员可在 Clawdbot 控制台中管理子账号、分配模型权限(需定制开发)。

这样,用户只需一次登录,无需记忆两套凭证。

6. 安全加固效果验证与日常运维

6.1 三层防护效果自检清单

防护层 验证方式 预期结果 不通过说明
Nginx 反向代理 curl -I http://ai.yourcompany.com 返回 301 Moved Permanently 未启用 HTTP→HTTPS 跳转
HTTPS 加密 浏览器访问,点击地址栏锁图标 显示“连接安全”,证书由 Let’s Encrypt 颁发 证书过期或配置错误
Basic Auth 直接访问 https://ai.yourcompany.com 弹出用户名/密码框 认证未启用或 .htpasswd 路径错误
API 路径隔离 curl https://ai.yourcompany.com/api/tags 返回 401 Unauthorized location /api/ 未生效或未加 auth_basic
Token Header 认证 curl -H "Authorization: Bearer ollama" https://ai.yourcompany.com/api/tags 返回 200 + JSON 后端未校验 Authorization 头

全部通过,即表示三层加固已就绪。

6.2 日常运维建议

  • 证书续期:Certbot 默认每周日凌晨 2 点自动续期,无需人工干预。可手动测试:sudo certbot renew --dry-run
  • 日志审计:Nginx 访问日志 /var/log/nginx/clawdbot.access.log 记录所有请求,重点关注 401/403 状态码,识别异常扫描。
  • 模型热更新:当需切换至更大显存的 Qwen 新模型(如 qwen3:72b)时,只需在 Ollama 中 ollama pull,Clawdbot 配置中更新 model id 即可,无需重启 Nginx。
  • 性能监控:建议部署 Prometheus + Grafana,采集 Nginx 连接数、Ollama GPU 显存占用、Clawdbot 响应延迟等指标。

6.3 为什么这套方案适合企业场景?

  • 零信任设计:不依赖客户端“自觉”,所有请求必须经过网关鉴权;
  • 最小权限原则:前端只能走 /,API 只能走 /api/,且需双重认证(Nginx + Bearer);
  • 合规友好:HTTPS 满足等保 2.0 通信加密要求,Basic Auth 满足身份鉴别要求;
  • 平滑演进:未来可轻松替换为 JWT/OAuth2,或接入 LDAP/AD,架构无侵入。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐