Dify 部署指南:从 IP 登录到域名 + HTTPS 实操
本文记录了如何将通过腾讯云安装的 Dify(社区版) 从原始的 IP 访问,升级为 域名访问并启用 HTTPS 的完整步骤。
适用于使用 Docker 环境部署的 Dify 实例。
一、背景说明
默认情况下,通过官方脚本或 Docker 安装的 Dify 只能通过服务器 IP 登录,例如:
http://123.45.67.89
为了更专业、更安全地对外访问,我们希望实现:
- 使用自定义域名访问(例如
ai.mydify.cn); - 启用 HTTPS 加密(采用外部签发的 SSL 证书或 Let’s Encrypt 自动签发)。
二、环境与前提条件
- 腾讯云服务器(或其他云主机)
已安装 Docker、Docker Compose。 - Dify 已通过 Docker 正常运行
可通过 IP 访问(如http://your-server-ip)。 - 域名解析已生效
在域名服务商(腾讯云、阿里云等)中,将域名 A 记录指向服务器公网 IP。
示例:ai.mydify.cn → 123.45.67.89 - 已准备好 SSL 证书文件
fullchain.pem(或.crt)privkey.pem(或.key)
三、准备证书文件
假设我们将外部签发的证书文件放在服务器:
/etc/ssl/certs/fullchain.pem
/etc/ssl/certs/privkey.pem
如果你是
.crt+.key格式,只需重命名为上述两个文件。
四、挂载证书目录到 nginx 容器
Dify 部署通常包含一个 nginx 容器作为反向代理。
我们只需将证书目录挂载进去。
方式一:docker run 模式
如果你的 nginx 是用命令运行的:
docker run -d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v /root/certs:/etc/nginx/certs:ro \
-v /root/nginx/conf.d:/etc/nginx/conf.d \
nginx:latest
方式二:docker-compose 模式(推荐)
编辑 docker-compose.yml:
services:
nginx:
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /root/certs:/etc/nginx/certs:ro
- ./nginx/conf.d:/etc/nginx/conf.d
:ro表示只读挂载,防止容器意外修改证书。
📝 五、配置 nginx 支持 HTTPS
编辑 nginx 配置文件 /root/nginx/conf.d/ai.mydify.cn.conf:
# HTTP 自动跳转到 HTTPS
server {
listen 80;
server_name ai.mydify.cn;
return 301 https://$host$request_uri;
}
# HTTPS 反向代理 Dify
server {
listen 443 ssl;
server_name ai.mydify.cn;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://docker-web-1:3000; # Dify Web 服务容器名或 IP
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;
}
}
你可以通过
docker ps查看 Dify 的 Web 容器名称(通常为docker-web-1)。
六、测试与重启 nginx
进入 nginx 容器验证配置:
docker exec -it docker-nginx-1 nginx -t
出现:
nginx: configuration file /etc/nginx/nginx.conf test is successful
说明配置无误。
然后重载:
docker exec -it docker-nginx-1 nginx -s reload
七、访问验证
在浏览器中打开:
https://ai.mydify.cn
若能正常访问 Dify 页面并显示 🔒 图标,表示 HTTPS 已启用成功!
八、(可选)证书自动续期
若证书由 Let’s Encrypt 签发,可在宿主机设置自动续签任务:
crontab -e
添加:
0 3 * * * certbot renew --quiet && docker exec docker-nginx-1 nginx -s reload
🧩 九、常见问题
| 问题 | 解决方法 |
|---|---|
| 浏览器显示不安全 | 检查 ssl_certificate 路径是否正确挂载到容器 |
| 访问仍跳转到 IP | 确认 Dify 的环境变量中 APP_URL 已更新为域名 |
Nginx 报错 cannot load certificate | 证书路径错误或文件权限不足,检查 /root/certs |
十、总结
完成以上步骤后,你的 Dify 已具备:
- ✅ 专属域名访问(ai.mydify.cn)
- ✅ HTTPS 安全加密
- ✅ 自动跳转与反向代理
这样不仅更安全,也便于后续接入外部系统(如 Webhook、OAuth 登录等)。
参考命令速查:
| 操作 | 命令 |
|---|---|
| 查看容器列表 | docker ps |
| 进入 nginx 容器 | docker exec -it docker-nginx-1 bash |
| 测试配置 | nginx -t |
| 重载 nginx | nginx -s reload |
油管:https://youtu.be/7qHEyiC3_V4