摘要:本文详细讲解如何将本地部署的 Dify 服务从本机访问改为局域网或指定端口访问。核心在于正确配置 CONSOLE_API_URLCONSOLE_WEB_URLAPP_API_URLAPP_WEB_URLEXPOSE_NGINX_PORTSERVER_CONSOLE_API_URL 这六个关键环境变量。文章覆盖了从本机换端口、局域网访问到常见错误排查的全流程,并提供了清晰的对照表和实操命令,帮助开发者快速完成配置,避免因 URL 配置错误导致的页面能打开但接口失败、SSR 500 错误等问题。

> 场景:Dify 已能在本机打开,但要改成局域网 IP、换成 80 端口、或给同事用 http://192.168.x.x:8080 访问。

> 关键词(检索用):CONSOLE_API_URLCONSOLE_WEB_URLAPP_API_URLAPP_WEB_URLEXPOSE_NGINX_PORTSERVER_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 映射到宿主机的端口 808080

记忆口诀:

  • 带 CONSOLE_/APP_ 且给浏览器用的:写宿主机 URL
  • SERVER_CONSOLE_API_URL:写容器服务名,不要写 localhost

写反的典型后果:

  1. 页面能开,接口全失败(CORS / 连错地址)
  2. 页面 500(SSR 去连浏览器地址或错误 IP)
  3. 改了端口,前端仍请求旧端口


## 二、官方链路长什么样

默认(本文示例):

```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`,就完成了。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐