必须通过nginx反向代理完成ssl终止,否则浏览器拒绝混合内容、api调用失败、前端资源被拦截且无法公网稳定访问;需确认dify前后端端口(3000/8000)、证书pem格式无密码、proxy_pass路径斜杠严格对齐,并配置http自动跳转https。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

为本地运行的 Dify 服务启用 HTTPS 访问,必须通过 Nginx 反向代理完成 SSL 终止,否则浏览器将拒绝加载混合内容、API 调用失败、前端资源被拦截,且无法通过公网域名稳定访问。
确认服务端口与证书就绪
检查 Dify 前端是否运行在 【3000 端口】、后端 API 是否运行在 【8000 端口】(Docker Compose 默认配置),执行 docker ps | grep dify 验证容器状态;若端口被占用或已修改,后续 proxy_pass 必须同步调整,否则请求直接超时。
确认 SSL 证书文件已存放于服务器可读路径,如 /etc/nginx/ssl/dify.crt 和 /etc/nginx/ssl/dify.key;证书必须为 PEM 格式,私钥不可加密(即无密码保护),否则 Nginx 启动会卡在密码输入环节并报错“SSL_CTX_use_PrivateKey_file failed”。
运行 sudo nginx -t 验证配置语法——这一步不能跳过,Nginx 不会自动提示证书路径错误,只会在 reload 时静默失败。
配置 Nginx 反向代理并启用 HTTPS
创建站点配置文件:sudo nano /etc/nginx/sites-available/dify-https,写入以下内容:
server {
listen 443 ssl http2;
server_name dify.example.com;
ssl_certificate /etc/nginx/ssl/dify.crt;
ssl_certificate_key /etc/nginx/ssl/dify.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
location /api/ {
proxy_pass http://127.0.0.1:8000/api/;
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;
}
}
注意:【/api/ 路径末尾的斜杠必须与 proxy_pass 中的斜杠严格对齐】,否则 API 请求路径会被重复拼接,导致 404 或 400 错误。例如 proxy_pass 写成 http://127.0.0.1:8000(无尾部斜杠)而 location 是 /api/,则请求 /api/v1/chat 将被转发为 http://127.0.0.1:8000/api/v1/chat,但 Dify 后端实际监听的是 /v1/chat,造成路由不匹配。
启用该配置:sudo ln -sf /etc/nginx/sites-available/dify-https /etc/nginx/sites-enabled/。
强制 HTTP 跳转 HTTPS 并重载服务
第一步:新建跳转配置文件 sudo nano /etc/nginx/sites-available/dify-http,内容仅需两行:
server {
listen 80;
server_name dify.example.com;
return 301 https://$host$request_uri;
}
第二步:软链接启用:sudo ln -sf /etc/nginx/sites-available/dify-http /etc/nginx/sites-enabled/。
第三步:检查全部配置是否合法:sudo nginx -t;若输出 “syntax is ok” 且 “test is successful”,继续下一步。
第四步:平滑重载 Nginx:sudo systemctl reload nginx。这一步不会中断现有连接,但若此前已有错误配置残留,reload 会失败并回滚到上一版,此时需先 sudo systemctl stop nginx 再 sudo nginx -s start 强制重启。











