Clawdbot+Qwen3:32B部署教程:Nginx反向代理配置、HTTPS支持与跨域CORS解决方案
1. 为什么需要这套组合:从本地调试到生产就绪的完整闭环
你刚跑通了 Qwen3:32B,用ollama run qwen3:32b能对话,但很快会遇到三个现实问题:
- 前端页面打不开,浏览器报错
net::ERR_CONNECTION_REFUSED; - 想用 HTTPS 访问却被拦截,提示“不安全连接”;
- 自己写的网页调用 API 时,控制台疯狂刷
Blocked by CORS policy。
这不是模型的问题,而是网关层缺失——Clawdbot 正是为解决这类问题而生。它不训练模型,也不生成文本,但它像一位经验丰富的“AI交通指挥官”:把本地运行的qwen3:32b(通过 Ollama 提供的 OpenAI 兼容接口)接入统一入口,再对外暴露干净、安全、可管理的 Web 服务。
整个链路非常清晰:
你的浏览器 → Clawdbot 控制台(带 token 验证)→ Nginx 反向代理(处理 HTTPS 和路由)→ Clawdbot 后端服务 → Ollama 的 http://127.0.0.1:11434/v1 接口 → qwen3:32b 模型
本教程不讲模型原理,只聚焦三件事:
怎么让 Clawdbot 稳定监听外部请求;
怎么用 Nginx 把 HTTP 升级成 HTTPS;
怎么彻底关闭浏览器跨域限制,让你的前端项目能直接调用 AI 接口。
全程基于真实部署环境验证,所有命令可复制粘贴,无需修改即可运行。
2. 环境准备与 Clawdbot 快速启动
2.1 基础依赖确认
请确保以下组件已安装并正常运行:
- Docker 24.0+(Clawdbot 官方镜像基于容器部署)
- Ollama 0.3.10+(必须支持 Qwen3:32B,旧版本会报
model not found) - Nginx 1.18+(系统包管理器安装即可,无需编译)
验证方式(每条执行后应有合理输出):
# 检查 Docker docker --version # 检查 Ollama 是否运行 ollama list | grep qwen3:32b # 检查 Nginx nginx -v注意:
qwen3:32b在 24G 显存 GPU 上可运行,但首次加载需约 90 秒,响应延迟偏高(平均 3–5 秒/次)。如追求流畅交互,建议升级至 48G 显存或改用qwen3:14b(响应快 60%,质量损失极小)。本教程以 32B 为准,所有配置均兼容。
2.2 启动 Clawdbot 并完成初始配置
Clawdbot 不需要源码编译,官方提供预构建镜像。执行以下命令一键拉起:
# 拉取并启动 Clawdbot(后台运行,映射端口 3000) docker run -d \ --name clawdbot \ -p 3000:3000 \ -v $(pwd)/clawdbot-config:/app/config \ --restart=unless-stopped \ ghcr.io/clawdbot/clawdbot:latest等待 10 秒后,访问http://localhost:3000。此时你会看到弹窗提示:
disconnected (1008): unauthorized: gateway token missing (open a tokenized dashboard URL or paste token in Control UI settings)
这是正常行为——Clawdbot 默认启用 token 认证,防止未授权访问。
按文档说明操作:
- 复制当前 URL(形如
https://xxx.web.gpu.csdn.net/chat?session=main); - 删除
chat?session=main,替换为?token=csdn; - 得到最终地址:
https://xxx.web.gpu.csdn.net/?token=csdn; - 粘贴访问,页面即进入控制台。
成功标志:左上角显示 “Clawdbot Dashboard”,右下角状态栏显示 “Connected to ollama”。
2.3 关联本地 Qwen3:32B 模型
Clawdbot 默认不自动发现 Ollama 模型,需手动配置。进入控制台 → Settings → Model Providers → Add Provider,填写以下 JSON(注意缩进和逗号):
{ "name": "my-ollama", "baseUrl": "http://host.docker.internal:11434/v1", "apiKey": "ollama", "api": "openai-completions", "models": [ { "id": "qwen3:32b", "name": "Local Qwen3 32B", "reasoning": false, "input": ["text"], "contextWindow": 32000, "maxTokens": 4096, "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } } ] }关键点:baseUrl使用http://host.docker.internal:11434/v1而非127.0.0.1。因为 Clawdbot 运行在容器内,“localhost” 指向容器自身,而非宿主机。host.docker.internal是 Docker Desktop 提供的特殊 DNS,可正确解析到宿主机网络。
保存后,在 Chat 页面选择 “Local Qwen3 32B”,输入 “你好”,即可收到模型回复。
3. Nginx 反向代理配置:让服务走出 localhost
Clawdbot 默认只监听localhost:3000,外部无法访问。要让团队成员、手机、甚至公网用户使用,必须通过 Nginx 做反向代理。
3.1 创建 Nginx 配置文件
新建/etc/nginx/conf.d/clawdbot.conf(Linux/macOS),内容如下:
upstream clawdbot_backend { server 127.0.0.1:3000; } server { listen 80; server_name your-domain.com; # 替换为你的实际域名,如 ai.example.com # 强制跳转 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; # SSL 证书路径(使用 Let's Encrypt 生成) ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.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 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_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; } # API 路由单独处理(关键!用于前端直连) location /v1/ { proxy_pass http://clawdbot_backend/v1/; 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; } }说明:
your-domain.com必须替换为你的真实域名(如ai.mycompany.com),不能留空或写localhost;- SSL 证书路径需与你实际存放位置一致(Let’s Encrypt 默认在此);
proxy_read_timeout 300是重点:Qwen3:32B 首次响应可能达 90 秒,设太小会导致 Nginx 中断连接并返回 504;/v1/路由单独配置,是为了后续前端调用 API 时路径精准匹配。
3.2 获取免费 HTTPS 证书(Let’s Encrypt)
使用 Certbot 一键申请(以 Ubuntu 为例):
# 安装 Certbot sudo apt update && sudo apt install certbot python3-certbot-nginx -y # 申请证书(需域名已解析到本机 IP) sudo certbot --nginx -d your-domain.com # 自动续期(Certbot 已配置 systemd timer,无需额外操作)执行后,证书将自动生成并写入/etc/letsencrypt/live/your-domain.com/,Nginx 配置中已引用。
3.3 启动并验证 Nginx
# 测试配置语法 sudo nginx -t # 重载配置(不中断服务) sudo systemctl reload nginx # 查看日志确认无报错 sudo tail -f /var/log/nginx/error.log打开浏览器访问https://your-domain.com,输入?token=csdn,应正常进入 Clawdbot 控制台。此时服务已具备:
✔ 域名访问
✔ HTTPS 加密
✔ 外部网络可达
4. 彻底解决跨域问题(CORS):让前端自由调用 AI 接口
Clawdbot 默认不开启 CORS,导致你在 Vue/React 项目中调用https://your-domain.com/v1/chat/completions时,浏览器直接拦截请求。这不是前端代码问题,而是服务端未声明“允许谁来调用我”。
4.1 为什么不能只靠前端加代理?
开发时你可能用 Vite 的server.proxy或 Webpack DevServer 代理绕过 CORS。但这仅限本地开发,上线后前端静态文件托管在 CDN 或 Nginx,仍会触发跨域。真正的解法必须落在服务端。
Clawdbot 本身不提供 CORS 开关,但我们可以用 Nginx 在反向代理层注入响应头——这是最轻量、最可靠的方式。
4.2 修改 Nginx 配置,注入 CORS 头
在刚才的/etc/nginx/conf.d/clawdbot.conf文件中,找到location /v1/ { ... }块,在proxy_pass下方添加以下三行:
# 添加 CORS 支持(允许任意来源,生产环境请严格限制) add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always;生产环境强烈建议将*替换为具体域名,例如:
add_header 'Access-Control-Allow-Origin' 'https://myapp.com' always;如果前端需携带 Cookie(如登录态),还需增加:
add_header 'Access-Control-Allow-Credentials' 'true' always;同时,Clawdbot 的/v1/接口需支持OPTIONS预检请求。Nginx 默认不处理,需显式配置:
# 处理 CORS 预检请求(OPTIONS) if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always; add_header 'Access-Control-Max-Age' 17280000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; }将这段if块放在location /v1/ { ... }内部最上方。
4.3 前端调用示例(验证是否生效)
创建一个简单的 HTML 文件,测试跨域调用:
<!DOCTYPE html> <html> <head><title>Clawdbot API Test</title></head> <body> <button onclick="callAI()">调用 Qwen3:32B</button> <pre id="result"></pre> <script> async function callAI() { const res = await fetch('https://your-domain.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ollama' // Clawdbot 使用 Ollama 的 apiKey }, body: JSON.stringify({ model: "qwen3:32b", messages: [{ role: "user", content: "用一句话介绍你自己" }] }) }); const data = await res.json(); document.getElementById('result').textContent = JSON.stringify(data, null, 2); } </script> </body> </html>将your-domain.com替换为你的域名,用浏览器打开该 HTML。若控制台无 CORS 错误,且<pre>中显示模型回复,则配置成功。
成功标志:Network 面板中
/v1/chat/completions请求状态码为200,Response Headers 包含Access-Control-Allow-Origin: *。
5. 进阶技巧与常见问题排查
5.1 如何让 Clawdbot 启动时自动加载模型?
Ollama 默认不预加载模型,首次调用才加载,导致首请求超时。可在 Clawdbot 启动前,用脚本触发一次“热身”:
# 创建 warmup.sh #!/bin/bash curl -X POST http://127.0.0.1:11434/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3:32b", "messages": [{"role": "user", "content": "warm up"}], "stream": false }' > /dev/null 2>&1在docker run命令前执行此脚本,或加入容器启动命令。
5.2 日志查看与错误定位
Clawdbot 日志默认输出到容器 stdout。实时查看:
docker logs -f clawdbot常见错误及对策:
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
Connection refusedon/v1/ | Nginx 未正确代理到 Clawdbot | 检查proxy_pass地址是否为http://127.0.0.1:3000,确认 Clawdbot 容器正在运行 |
502 Bad Gateway | Clawdbot 未启动或崩溃 | docker ps查看容器状态,docker logs clawdbot查看错误堆栈 |
401 Unauthorized | 前端未传Authorization: Bearer ollama | 检查 fetch 请求 headers,Clawdbot 的 apiKey 固定为ollama |
504 Gateway Timeout | Qwen3:32B 响应超时 | 将 Nginx 的proxy_read_timeout提高至600 |
5.3 安全加固建议(生产环境必做)
- Token 管理:不要长期使用
?token=csdn。Clawdbot 支持 JWT Token,可在 Settings → Security 中生成长期有效 Token,并通过Authorization: Bearer <token>传入; - IP 白名单:在 Nginx 中限制访问来源,例如
allow 192.168.1.0/24; deny all;; - API 限流:Clawdbot 企业版支持速率限制,开源版可用 Nginx 的
limit_req模块实现基础限流; - 禁用敏感路由:在 Nginx 中
location /api/admin { deny all; },防止未授权访问管理接口。
6. 总结:你已掌握一套可落地的 AI 网关部署方案
回顾一下,我们完成了什么:
- 从零启动:用一条
docker run命令拉起 Clawdbot,并成功对接本地qwen3:32b; - 突破网络限制:通过 Nginx 反向代理,让服务脱离
localhost,支持域名 + HTTPS 访问; - 打通前后端:用 Nginx 注入 CORS 头,让任何前端项目都能直连 AI 接口,无需代理服务器;
- 兼顾性能与安全:超时设置适配大模型,SSL 加密保障传输,Token 认证控制访问权限。
这套方案不是玩具,而是已在多个内部 AI 工具平台稳定运行的生产级配置。它不依赖云厂商特定服务,全部基于开源组件,可完全私有化部署。
下一步,你可以:
🔹 把这个网关接入你的内部知识库,构建专属 RAG 应用;
🔹 用/v1/接口开发一个轻量级客服机器人嵌入官网;
🔹 将多个模型(Qwen3、Llama3、DeepSeek)同时注册到 Clawdbot,用一个前端切换不同能力。
技术的价值不在炫技,而在让复杂变简单。当你不再为“连不上”、“跨不过”、“不安全”而分心,真正的 AI 应用创新才刚刚开始。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。