Dify 部署后如何配置 Nginx 反向代理优化工作流访问?

文章导读
Dify 部署后配置 Nginx 反向代理主要用于接管 HTTPS 证书、统一入口流量并保障 WebSocket 长连接稳定,适合需要将 Dify 服务集成到现有域名体系的生产场景。风险边界在于若遗漏 WebSocket 升级头配置,工作流流式输出会立即断开。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Dify 部署后配置 Nginx 反向代理主要用于接管 HTTPS 证书、统一入口流量并保障 WebSocket 长连接稳定,适合需要将 Dify 服务集成到现有域名体系的生产场景。风险边界在于若遗漏 WebSocket 升级头配置,工作流流式输出会立即断开。

先说结论:Nginx 反向代理是 Dify 公网访问的标准前置方案,重点在于正确传递 Upgrade 头和调整超时时间。

  • 适合:已有 Nginx 服务器、需要统一 SSL 管理或域名绑定的场景。
  • 先准备:确保证书路径正确、Dify 容器内部端口可通达。
  • 验收:浏览器开发者工具中 WebSocket 连接状态为 101 且无报错。

命令速用版

以下是 Nginx 配置核心片段,直接替换 server 块中的 location 配置,确保支持 WebSocket 和长超时。

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 3600s;
    proxy_send_timeout 3600s;
}

为什么会这样

Dify 的工作流执行和聊天响应依赖服务端发送事件(SSE)或 WebSocket 保持长连接,默认 Nginx 配置会阻断此类连接。

Nginx 默认 HTTP 版本为 1.0,不支持 WebSocket 协议升级,且默认超时时间较短。若未显式设置 proxy_http_version 1.1Upgrade 头,客户端无法建立流式通道。若未调整 proxy_read_timeout,复杂工作流运行超过 60 秒会被 Nginx 强制切断,导致前端显示网络错误。

分步处理

按以下步骤完成 Nginx 反向代理配置,每步完成后检查状态。

步骤 1:确认 Dify 内部端口

查看 Dify docker-compose.yml 文件,确认 web 服务暴露的内部端口,通常为 3000。若修改过环境变量 CONSOLE_WEB_PORT,以实际值为准。

步骤 2:编写 Nginx 配置文件

/etc/nginx/conf.d/ 下创建 dify.conf,填入上述“命令速用版”中的配置片段。将 proxy_pass 地址改为实际 Dify 服务 IP 和端口。

步骤 3:配置 SSL 证书(可选但推荐)

若需 HTTPS,在 server 块中添加 listen 443 ssl 及证书路径配置。公钥和私钥文件权限需设置为 644 和 600,避免 Nginx 启动失败。

Dify 部署后如何配置 Nginx 反向代理优化工作流访问?

步骤 4:重载 Nginx

执行 nginx -t 检查语法,无误后执行 nginx -s reload。若报错,查看 /var/log/nginx/error.log 定位权限或路径问题。

怎么验证是否生效

通过浏览器开发者工具和日志确认代理配置是否生效。

检查点 1:网络连接状态

打开 Dify 页面,按 F12 进入开发者工具,切换至 Network 标签。触发一个工作流或聊天请求,观察请求类型。若看到状态码 101 Switching Protocols 或 SSE 连接持续保持,说明 WebSocket 升级成功。

检查点 2:长任务测试

运行一个预计耗时超过 60 秒的工作流。若页面未出现 504 Gateway Time-out 且最终返回结果,说明 proxy_read_timeout 配置生效。

检查点 3:Nginx 访问日志

查看 /var/log/nginx/access.log,确认有来自客户端的 200 状态码记录,且无大量 499 或 502 错误。

常见坑

配置过程中容易遇到以下问题,需提前规避。

WebSocket 握手失败

Dify 部署后如何配置 Nginx 反向代理优化工作流访问?

原因通常是遗漏 proxy_set_header Connection "upgrade"proxy_http_version 1.1。表现为前端一直 loading 或立即报错。

HTTPS 混合内容错误

若 Nginx 终止 SSL 但后端 Dify 配置为 HTTP,浏览器可能拦截资源。需在 Dify 环境变量中确认 CONSOLE_API_URL 与访问协议一致。

请求体过大被拦截

上传大文件或长上下文时,若 Nginx 未调整 client_max_body_size,会返回 413 错误。建议根据业务需求显式设置该参数。

常见问题

配置后出现 502 Bad Gateway 怎么办?

检查 Dify 容器是否正常运行且 Nginx 能连通该端口。

使用 curl http://127.0.0.1:3000 在 Nginx 服务器上测试后端可达性。若不通,检查 Docker 网络模式或防火墙设置。

为什么流式输出会中途断开?

通常是 Nginx 超时设置过短或缓冲区不足。

确保 proxy_read_timeout 设置足够长,并尝试关闭 proxy_buffering,设置为 off 以确保数据实时透传。

需要配置负载均衡吗?

单实例部署不需要,多实例部署需注意会话保持。

若部署多个 Dify 后端实例,需在 Nginx 配置 ip_hash 或确保后端共享 Session 存储,否则用户登录状态可能丢失。

参考来源

  • Dify 官方文档 - 部署指南 (docs.dify.ai)
  • Nginx 官方文档 - WebSocket 代理配置 (nginx.org)