Clawdbot+Qwen3:32B企业级部署:Nginx反向代理+HTTPS+Basic Auth三层安全加固方案
本文介绍了如何在星图GPU平台上自动化部署Clawdbot 整合 qwen3:32b代理网关与管理平台镜像,实现企业级AI代理服务的安全接入。通过Nginx反向代理、HTTPS加密与Basic Auth三层防护,该镜像可稳定支撑Qwen3:32B大模型的受控对话交互,适用于智能客服、内部知识问答等典型企业AI应用场景。
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.comclawdbot.example.netgateway.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;
}
}
这个配置做了四件关键事:
- 双 upstream 分离:
clawdbot_backend指向前端,ollama_api指向模型 API,物理隔离; - HTTP → HTTPS 强制跳转:所有明文请求自动升级;
- 前端
/全量代理:用户访问https://ai.yourcompany.com/即进入 Clawdbot 界面; - 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 }
}
]
}
}
关键变化:
baseUrl从http://127.0.0.1:11434/v1→https://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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)