自己折腾了一台云服务器,好不容易把Dify跑起来,结果发现只能通过“IP+端口”访问,不仅每次都要记一串数字,浏览器还总是弹“不安全”警告,更别提分享给团队用了——这体验感直接打对折。
其实,给Dify配上一个正式的域名和HTTPS证书,并没有想象中那么复杂。今天这篇文章,我们就从零开始,把Dify配置域名、绑定HTTPS的全流程拆解清楚。无论你用的是Nginx还是宝塔面板,照着操作都能搞定。
一、准备工作:先把“地基”打好
在动手配置之前,有三样东西你必须要提前准备好,缺一不可。
- 一个已经解析到服务器IP的域名:比如
dify.yourdomain.com。如果你还没有域名,建议在正规服务商(如阿里云、腾讯云、Namecheap)购买一个,便宜的年付域名几十块钱就能搞定。 - 一台运行中的云服务器:Dify已经部署成功,并且你能通过
服务器公网IP:端口号(例如123.123.123.123:80或123.123.123.123:3000)正常访问Dify的Web界面。 - SSL证书文件:现在各大云厂商都提供免费的一年期SSL证书,或者你也可以用Let‘s Encrypt申请3个月免费的证书(推荐使用acme.sh自动化续期)。准备好证书的
.pem(公钥)和.key(私钥)文件。
二、核心逻辑:反向代理是如何工作的?
很多朋友第一次接触“反向代理”这个概念会觉得有点抽象。简单来说,Dify本身是一个Web应用,它默认监听在某个端口上(比如 80 或 3000)。而我们通过Nginx这样的软件,在服务器上开一个“门卫”(即反向代理服务),这个门卫监听标准的443端口(HTTPS专用),当用户用域名访问时,门卫负责把请求“转发”给后端的Dify,同时完成SSL加密解密的工作。
这样做的好处很明显:
- 用户只需记住域名,无需关心端口号。
- 所有数据传输都是加密的,安全等级拉满。
- 可以集中管理多个应用,为未来扩展留下空间。
三、实操步骤:Nginx反向代理配置详解
以下步骤假设你的服务器操作系统为Ubuntu 20.04/22.04或CentOS 7+,并且已经安装了Nginx(如果没有安装,执行 sudo apt install nginx 或 sudo yum install nginx 即可)。
步骤1:上传SSL证书文件
在你的服务器上创建一个目录,专门用来存放证书文件,例如 /etc/nginx/ssl/。
sudo mkdir -p /etc/nginx/ssl
# 使用scp或sftp将你的证书文件上传到这个目录
# 例如:scp your_cert.pem root@你的服务器IP:/etc/nginx/ssl/
# 例如:scp your_key.key root@你的服务器IP:/etc/nginx/ssl/
步骤2:创建Nginx配置文件
在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 目录下新建一个配置文件,建议以域名命名,例如 dify.conf。
sudo nano /etc/nginx/conf.d/dify.conf
步骤3:写入完整的反向代理配置
将以下代码粘贴进去,注意根据你的实际情况修改 server_name、证书路径 和 Dify后端地址。
server {
listen 80;
server_name dify.yourdomain.com;
# 强制将HTTP请求重定向到HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name dify.yourdomain.com;
# SSL证书配置
ssl_certificate /etc/nginx/ssl/your_cert.pem;
ssl_certificate_key /etc/nginx/ssl/your_key.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 关键配置:反向代理到Dify
location / {
proxy_pass http://127.0.0.1:3000; # 将3000替换为你的Dify实际运行端口
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;
# 支持WebSocket(Dify的对话流需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 可选:配置静态资源缓存,提升加载速度
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
proxy_pass http://127.0.0.1:3000;
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
注意: 如果你用Docker部署Dify,且Dify容器端口映射到了宿主机的 8080,那么 proxy_pass 里就写 http://127.0.0.1:8080。如果你把Dify暴露在了宿主机的 80 端口,可以直接写 http://127.0.0.1:80。
步骤4:检查配置并重启Nginx
# 检查配置文件语法是否正确
sudo nginx -t
# 如果输出 "syntax is ok" 和 "test is successful",则重启Nginx
sudo systemctl restart nginx
# 或者使用
sudo nginx -s reload
步骤5:验证效果
打开浏览器,输入 https://dify.yourdomain.com。如果一切顺利,你会看到小锁图标,并且可以正常登录和使用Dify了。
四、使用宝塔面板的用户看这里
如果你用的是宝塔面板(BT Panel),操作会更直观一些,但核心原理是一样的。
- 进入宝塔面板 -> 网站 -> 添加站点,输入你的域名(例如
dify.yourdomain.com)。 - 创建成功后,点击该站点右侧的“设置” -> “SSL”,选择“Let‘s Encrypt”免费申请并开启SSL。
- 回到“设置” -> “反向代理”,目标URL填写
http://127.0.0.1:3000(替换为你的实际端口),并勾选“启用反向代理”。 - 宝塔通常会自动生成Nginx配置,但你需要手动在生成的配置文件中添加WebSocket支持(见上方Nginx配置中的
proxy_set_header Upgrade和Connection部分)。
宝塔最大的好处是省去了手写配置的麻烦,但切记要检查WebSocket配置,否则Dify的对话功能可能会异常。
五、常见问题与避坑指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 访问域名显示“502 Bad Gateway” | Nginx无法连接到Dify后端 | 检查 proxy_pass 中的IP和端口是否正确,确认Dify服务是否在运行(docker ps 或 systemctl status dify)。 |
| 页面可以打开,但对话功能无法使用 | WebSocket代理未配置 | 在 location / 中添加 proxy_http_version 1.1 以及 proxy_set_header Upgrade 和 Connection 指令。 |
| 浏览器提示“ERR_SSL_PROTOCOL_ERROR” | 证书文件错误或格式不对 | 确认 ssl_certificate 指向的是 .pem 或 .crt 文件,ssl_certificate_key 指向的是 .key 文件,且文件权限为600或644。 |
| 配置后访问仍是HTTP | 未配置301重定向 | 确保第一个 server 块中写了 return 301 https://$host$request_uri;。 |
六、进阶建议:让Dify跑得更稳
域名和HTTPS配置好之后,你的Dify已经具备了“生产级”的访问能力。但如果你想让它更稳定、更适合团队协作,还有几件事值得做:
- 开启防火墙:在云服务器安全组中,只放行
80(用于重定向)和443端口,关闭Dify直接暴露的端口(如3000),避免被直接扫描攻击。 - 配置自动续签证书:如果使用Let‘s Encrypt,建议用acme.sh或certbot设置定时任务,避免证书过期导致服务中断。
- 选择靠谱的服务器和域名:我们推荐使用主流云厂商的轻量应用服务器或ECS,稳定性有保障。域名方面,不要贪图便宜买来历不明的域名,正规渠道的域名在解析速度和备案支持上都更可靠。
最后,如果你在配置过程中遇到任何“卡壳”的地方,不妨从检查防火墙规则和Nginx错误日志(/var/log/nginx/error.log)入手,绝大多数问题都能在这里找到线索。希望这篇指南能帮你顺利把Dify“挂”到自己的域名上,真正用起来。