跳到主要内容

使用 Cloudflare Tunnel 配置 HTTPS

安全地将 Open WebUI 暴露到互联网。无需开放端口,无需证书,无需反向代理。

Cloudflare Tunnel (cloudflared) 在您的机器与 Cloudflare 边缘网络之间创建一条仅出站的连接。流量将通过 Cloudflare 的基础设施进行传输,并自带自动 TLS、DDoS 防护和访问控制,且无需在您的服务器上暴露任何一个端口。

何时使用 Cloudflare Tunnel

如果您希望获得生产级别的公共访问权限,且无需管理 TLS 证书或防火墙规则,这是推荐的方法。它适用于任何网络,包括 NAT 后方或有严格防火墙限制的网络环境。


前提条件

要求细节
Open WebUI本地运行于端口 8080(默认)
Cloudflare 账号免费注册于 cloudflare.com
Cloudflare 上的域名您的域名 DNS 必须由 Cloudflare 托管

选项 A:使用仪表板设置(无需 CLI)

这是最简单的路径。所有配置都通过 Cloudflare 仪表板完成。

1. 创建隧道

  1. 前往 Zero Trust → Networks → Connectors
  2. 点击 Create a tunnel → 选择 Cloudflared
  3. 为其命名(例如:open-webui
  4. 按照安装指南在您的机器上运行连接器

2. 添加公共主机名

在隧道配置中,添加一个 Public Hostname

字段数值
Subdomain (子域名)chat(或您喜欢的其他名称)
Domain (域名)选择您的 Cloudflare 域名
Service type (服务类型)HTTP
URLlocalhost:8080

保存。Cloudflare 将自动创建 DNS 记录。

3. 访问 Open WebUI

打开 https://chat.your-domain.com。HTTPS 完全由 Cloudflare 处理。


选项 B:使用 CLI 设置

适用于自动化、基础设施即代码 (IaC) 或无图形界面的服务器。

1. 安装 cloudflared

brew install cloudflared

2. 身份验证

cloudflared tunnel login

这会打开浏览器以授权 cloudflared 访问您的 Cloudflare 账号。

3. 创建隧道

cloudflared tunnel create open-webui

注意输出中的 Tunnel ID。配置时需要用到它。

4. 配置

创建 ~/.cloudflared/config.yml

tunnel: YOUR_TUNNEL_ID
credentials-file: /home/YOUR_USER/.cloudflared/YOUR_TUNNEL_ID.json

ingress:
  - hostname: chat.your-domain.com
    service: http://localhost:8080
  - service: http_status:404

5. 创建 DNS 记录

cloudflared tunnel route dns open-webui chat.your-domain.com

6. 启动隧道

cloudflared tunnel run open-webui

打开 https://chat.your-domain.com


作为系统服务运行

为了让隧道在系统重启后继续保持运行:

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

这会自动使用位于 ~/.cloudflared/config.yml 的配置。


配置 Open WebUI

设置 WEBUI_URL 以确保 OAuth 回调和内部链接可以正确解析:

docker run -d \
  -p 8080:8080 \
  -e WEBUI_URL=https://chat.your-domain.com \
  -v open-webui:/app/backend/data \
  --name open-webui \
  ghcr.io/open-webui/open-webui:main

使用 Docker Compose 结合 cloudflared

在单个技术栈中运行 Open WebUI 和隧道连接器:

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - open-webui:/app/backend/data
    environment:
      - WEBUI_URL=https://chat.your-domain.com
    restart: unless-stopped

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
    restart: unless-stopped

volumes:
  open-webui:

Cloudflare 仪表板 中获取您的隧道 Token → 前往 [Networking → Tunnels] → 选择您的隧道 → 选择 Add a replica → 复制安装命令。该 Token 以 eyJ... 开头。

提示

open-webui 服务无需在 ports 中映射宿主机端口。cloudflared 会通过 Docker 的内部网络连接到它。要使用这种方式,请将隧道配置中的服务 URL 更改为 http://open-webui:8080


添加访问控制(可选)

Cloudflare Zero Trust 允许您将访问权限限制在身份验证之后,而无需改动 Open WebUI:

  1. 前往 Zero Trust → Access controls → Applications
  2. Create new application → 自托管 (Self-hosted) 与私有 (private)
  3. 将公共主机名设置为 chat.your-domain.com
  4. 创建一个 Access Policy(例如,仅允许后缀为 @your-company.com 的邮箱访问)

用户在访问 Open WebUI 之前将会先看到 Cloudflare 的登录页面。


快速参考

操作/内容命令 / 数值
创建隧道cloudflared tunnel create open-webui
启动隧道cloudflared tunnel run open-webui
添加 DNScloudflared tunnel route dns open-webui chat.your-domain.com
安装为系统服务sudo cloudflared service install
仪表板https://dash.cloudflare.com/?to=/:account/one/networks/connectors
设置 CORS 源CORS_ALLOW_ORIGIN=https://chat.your-domain.com
This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.