Dify :从 IP 登录到域名 + HTTPS 实操

Dify 部署指南:从 IP 登录到域名 + HTTPS 实操

本文记录了如何将通过腾讯云安装的 Dify(社区版) 从原始的 IP 访问,升级为 域名访问并启用 HTTPS 的完整步骤。
适用于使用 Docker 环境部署的 Dify 实例。

一、背景说明

默认情况下,通过官方脚本或 Docker 安装的 Dify 只能通过服务器 IP 登录,例如:

http://123.45.67.89

为了更专业、更安全地对外访问,我们希望实现:

  • 使用自定义域名访问(例如 ai.mydify.cn);
  • 启用 HTTPS 加密(采用外部签发的 SSL 证书或 Let’s Encrypt 自动签发)。

二、环境与前提条件

  1. 腾讯云服务器(或其他云主机)
    已安装 Docker、Docker Compose。
  2. Dify 已通过 Docker 正常运行
    可通过 IP 访问(如 http://your-server-ip)。
  3. 域名解析已生效
    在域名服务商(腾讯云、阿里云等)中,将域名 A 记录指向服务器公网 IP。
    示例:ai.mydify.cn → 123.45.67.89
  4. 已准备好 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
重载 nginxnginx -s reload

油管:https://youtu.be/7qHEyiC3_V4