Dify 本地部署改局域网访问:避开 4 大坑,一次配对
摘要:本文详细讲解如何将本地部署的 Dify 服务从本机访问改为局域网或指定端口访问。核心在于正确配置 CONSOLE_API_URL、CONSOLE_WEB_URL、APP_API_URL、APP_WEB_URL、EXPOSE_NGINX_PORT 和 SERVER_CONSOLE_API_URL 这六个关键环境变量。文章覆盖了从本机换端口、局域网访问到常见错误排查的全流程,并提供了清晰的对照表和实操命令,帮助开发者快速完成配置,避免因 URL 配置错误导致的页面能打开但接口失败、SSR 500 错误等问题。
> 场景:Dify 已能在本机打开,但要改成局域网 IP、换成 80 端口、或给同事用 http://192.168.x.x:8080 访问。
> 关键词(检索用):CONSOLE_API_URL、CONSOLE_WEB_URL、APP_API_URL、APP_WEB_URL、EXPOSE_NGINX_PORT、SERVER_CONSOLE_API_URL
很多人以为"改 Nginx 端口就行"。对 Dify 来说不够:前端和后端各有一套 对外公开 URL,必须一起改。
一、先分清两类地址
| 变量 | 谁在用 | 应该写成什么 |
|---|---|---|
CONSOLE_API_URL |
浏览器访问控制台 API | 宿主机可达地址,如 http://localhost:8080 |
CONSOLE_WEB_URL |
浏览器打开控制台页面 | 同上 |
APP_API_URL |
浏览器访问应用(WebApp)API | 同上 |
APP_WEB_URL |
浏览器打开应用页面 | 同上 |
SERVER_CONSOLE_API_URL |
容器内 Next.js 服务端请求 API | Docker 内网,推荐 http://api:5001 |
EXPOSE_NGINX_PORT |
官方 nginx 映射到宿主机的端口 | 如 8080 或 80 |
记忆口诀:
- 带 CONSOLE_/APP_ 且给浏览器用的:写宿主机 URL
- SERVER_CONSOLE_API_URL:写容器服务名,不要写
localhost
写反的典型后果:
- 页面能开,接口全失败(CORS / 连错地址)
- 页面 500(SSR 去连浏览器地址或错误 IP)
- 改了端口,前端仍请求旧端口
## 二、官方链路长什么样
默认(本文示例):
```text
浏览器
→ http://localhost:8080
→ docker-nginx-1:80
→ web:3000(页面)
→ api:5001(/console/api、/v1 等)
```
所以「修改本地网址」通常只改两块:
1. `.env` 里的公开 URL
2. (可选)`EXPOSE_NGINX_PORT` 端口
一般 **不需要** 再外挂一个叫 `dify-proxy` 的容器,除非你有特殊多网站共存需求。
---
## 三、常见改法实操
### 场景 A:继续本机访问,只换端口(8080 → 80)
编辑 `dify/docker/.env`:
```env
EXPOSE_NGINX_PORT=80
CONSOLE_API_URL=http://localhost
CONSOLE_WEB_URL=http://localhost
APP_API_URL=http://localhost
APP_WEB_URL=http://localhost
SERVER_CONSOLE_API_URL=http://api:5001
```
注意:端口是 80 时,URL 里通常**不写 `:80`**。
重启生效:
```bash
cd /d/Dify/dify/docker
docker compose up -d --force-recreate nginx web api
```
访问:`http://localhost`
> Windows 上 80 端口可能被 IIS/系统服务占用,冲突就改回 `8080`。
---
### 场景 B:局域网其他电脑访问(最常见)
假设你的电脑局域网 IP 是 `192.168.1.88`,端口仍为 `8080`:
```env
EXPOSE_NGINX_PORT=8080
CONSOLE_API_URL=http://192.168.1.88:8080
CONSOLE_WEB_URL=http://192.168.1.88:8080
APP_API_URL=http://192.168.1.88:8080
APP_WEB_URL=http://192.168.1.88:8080
SERVER_CONSOLE_API_URL=http://api:5001
```
然后:
```bash
cd /d/Dify/dify/docker
docker compose up -d --force-recreate web api nginx
```
同事浏览器打开:
```text
http://192.168.1.88:8080
```
防火墙放行入站 TCP `8080`。
**不要**只改 Nginx,却让 `.env` 仍是 `localhost`——别人打开页面后,前端 JS 会请求你机器上的 `localhost`,结果他们自己电脑接口全部失败。
---
### 场景 C:同时支持 localhost 和局域网 IP?
Dify 这一组变量通常只能配一个“主访问地址”。实务建议:
- 开发自用:写 `http://localhost:8080`
- 演示给同事:临时改成局域网 IP,演示完改回
或直接统一用局域网 IP(你本机也能用 IP 访问)
---
## 四、改完后必须重建哪些容器?
`.env` 变更后,至少重建会读取这些变量的服务:
```bash
cd /d/Dify/dify/docker
docker compose up -d --force-recreate web api nginx
```
验证环境是否生效:
```bash
docker compose exec web env | grep -E 'CONSOLE_|APP_|SERVER_CONSOLE'
```
期望类似:
```text
CONSOLE_API_URL=http://192.168.1.88:8080
APP_API_URL=http://192.168.1.88:8080
SERVER_CONSOLE_API_URL=http://api:5001
```
---
## 五、不要踩的坑
### 坑 1:把浏览器 URL 写成容器内网 IP
错误示例:
```env
CONSOLE_API_URL=http://172.18.0.9:5001
```
`172.18.x.x` 是 Docker 桥接网段,**浏览器访问不到**(除非额外做端口映射且碰巧),而且容器 IP 重建后会变。
### 坑 2:在 `docker-compose.yaml` 里硬编码覆盖 `.env`
错误示例:
```yaml
environment:
CONSOLE_API_URL: http://172.18.0.9:5001
SERVER_CONSOLE_API_URL: http://172.18.0.9:5001
```
这比改 `.env` 更坑:以后你怎么改 `.env` 都不生效。
应保持变量引用:
```yaml
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
APP_API_URL: ${APP_API_URL:-}
SERVER_CONSOLE_API_URL: ${SERVER_CONSOLE_API_URL:-http://api:5001}
```
### 坑 3:Git Bash 把路径参数“翻译”坏了
在 Git Bash 里如果有人写:
```bash
docker run ... -e NEXT_PUBLIC_BASE_PATH=/dify ...
```
可能被翻译成:
```text
NEXT_PUBLIC_BASE_PATH=C:/Program Files/Git/dify
```
页面直接乱套。本地改访问地址 **不需要** `NEXT_PUBLIC_BASE_PATH`。
### 坑 4:只改端口,不重建 nginx
`EXPOSE_NGINX_PORT` 改变后必须 recreate `nginx`,否则宿主机端口映射仍是旧的。
---
## 六、快速对照表
| 目标访问地址 | EXPOSE_NGINX_PORT | CONSOLE/APP URL |
|--------------|-------------------|-----------------|
| `http://localhost:8080` | 8080 | `http://localhost:8080` |
| `http://localhost` | 80 | `http://localhost` |
| `http://192.168.1.88:8080` | 8080 | `http://192.168.1.88:8080` |
| `http://dify.company.local` | 80 | `http://dify.company.local` |
`SERVER_CONSOLE_API_URL` 一律保持:
```env
SERVER_CONSOLE_API_URL=http://api:5001
```
---
## 七、验收
1. 本机或同事浏览器无痕打开新地址
2. 登录控制台,F12 → Network,确认 API 请求的 Host 是新地址
3. 知识库上传 / 对话跑通一条链路
```bash
curl -I http://<你的新地址>/
```
正常应是 `200` 或跳转到 `/install` / `/signin`,不应是长时间 `502` 或重定向循环。
---
## 小结
Dify「修改本地网址」的正确技术名,其实是:**配置公开访问 URL(Public URL)与 Nginx 暴露端口**。
核心四件套:
```text
CONSOLE_API_URL / CONSOLE_WEB_URL
APP_API_URL / APP_WEB_URL
```
加上:
```text
EXPOSE_NGINX_PORT
SERVER_CONSOLE_API_URL=http://api:5001
```
改完重建 `web` + `api` + `nginx`,就完成了。
更多推荐




所有评论(0)