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.1 和 Upgrade 头,客户端无法建立流式通道。若未调整 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 启动失败。
步骤 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 握手失败
原因通常是遗漏 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)