必须通过环境隔离、路由层映射和权限标签三重机制实现Dify多工作空间独立API网关;需启用ALLOW_CREATE_WORKSPACE=true,配置Nginx反代或Dify2OpenAI多实例,并绑定带工作空间限制的API密钥。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中为不同工作空间配置独立的API网关,必须打破默认共享网关的架构限制——因为Dify原生不提供“每个Workspace绑定专属网关”的UI开关,需通过环境隔离+路由层映射+权限标签三重机制实现逻辑隔离。
确认多工作空间功能已启用
进入Dify项目根目录下的 /api/.env 文件,确认存在且值为 true 的配置项:【ALLOW_CREATE_WORKSPACE=true】。若不存在,手动添加并保存;该参数是后续所有工作空间操作的前提,缺失将导致前端“Add Workspace”按钮不可见或点击无响应。
重启 API 服务容器使配置生效:docker-compose restart api。
为每个工作空间分配独立网关域名
方法一:Nginx反向代理分流(推荐用于生产环境)
在宿主机 Nginx 配置中为每个工作空间定义独立 server 块:
server {
listen 80;
server_name marketing.dify.example.com;
location / {
proxy_pass http://dify-marketing:80;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name support.dify.example.com;
location / {
proxy_pass http://dify-support:80;
proxy_set_header Host $host;
}
}
注意:两个 upstream 必须指向不同 Docker 网络中的 Dify 实例,不能共用同一套容器。否则域名不同但后端相同,无法实现数据隔离。
方法二:复用 Dify2OpenAI Gateway + 路由前缀区分(适合轻量测试)
启动多个 Dify2OpenAI Gateway 实例,每个实例绑定一个工作空间:
第一步:为 marketing 工作空间启动网关
cd gateway-marketing && npm start -- --base-url http://dify-api-marketing:5001 --workspace-id ws_marketing_abc
第二步:为 support 工作空间启动另一实例
cd gateway-support && npm start -- --base-url http://dify-api-support:5001 --workspace-id ws_support_xyz
每个网关实例监听不同端口(如 3001 和 3002),调用方通过端口区分目标工作空间,无需修改 Dify 内部代码。
绑定工作空间与网关密钥
登录 Dify Web UI → 进入对应工作空间 → 设置 → API 密钥 → 创建新密钥。
创建时务必勾选 【仅限当前工作空间使用】 选项(该选项仅在 ALLOW_CREATE_WORKSPACE=true 后可见)。未勾选则密钥全局有效,会绕过工作空间隔离策略。
复制生成的密钥,将其填入对应网关实例的环境变量 AUTHORIZED_API_KEYS 中,格式为逗号分隔字符串:AUTHORIZED_API_KEYS=sk-mkt-xxx,sk-mkt-yyy。
验证网关路由是否生效
执行 curl 命令测试 marketing 工作空间网关:
curl -X POST http://marketing.dify.example.com/v1/chat/completions \
-H "Authorization: Bearer sk-mkt-xxx" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4","messages":[{"role":"user","content":"hello"}]}'
观察响应头中是否包含 X-Workspace-ID: ws_marketing_abc。若存在,说明请求已准确路由至目标工作空间上下文;若返回 401 或缺失该 header,则密钥未绑定或网关未识别 workspace-id 参数。


















