Skip to main content
warning

本教程由社区贡献,不属于 Open WebUI 官方团队的支持范围。它仅作为如何针对特定用例自定义 Open WebUI 的演示。想要贡献吗?请查看贡献教程。

使用 Nginx 配置 HTTPS

确保用户与 Open WebUI 之间的通信安全至关重要。HTTPS(超文本传输安全协议)对传输的数据进行加密,防止被窃听和篡改。通过将 Nginx 配置为反向代理,您可以无缝地为 Open WebUI 部署添加 HTTPS,从而提高安全性和可信度。

本指南提供了三种设置 HTTPS 的方法:

  • 自签名证书 (Self-Signed Certificates):适用于开发和内部使用,使用 Docker。
  • Let's Encrypt:适用于需要受信任 SSL 证书的生产环境,使用 Docker。
  • Windows + 自签名证书:适用于 Windows 上的开发和内部使用,无需 Docker。
关键:为 WebSocket 连接配置 CORS

WebSocket 连接中一个非常常见且难以调试的问题是跨源资源共享 (CORS) 策略配置不当。当在 Nginx Proxy Manager 等反向代理后面运行 Open WebUI 时,您 必须 在 Open WebUI 配置中设置 CORS_ALLOW_ORIGIN 环境变量。

如果不这样做,即使您在 Nginx Proxy Manager 中启用了 "Websockets support",WebSocket 连接也会失败。

选择最适合您部署需求的方法。

Nginx Proxy Manager

Nginx Proxy Manager (NPM) 允许您轻松管理反向代理,并使用来自 Let's Encrypt 的有效 SSL 证书保护您的本地应用程序(如 Open WebUI)。 此设置可实现 HTTPS 访问,这对于许多移动浏览器由于安全要求而使用语音输入功能是必需的,且无需将应用程序的特定端口直接暴露给互联网。

先决条件

  • 一台运行 Docker 且 open-webui 容器正在运行的家用服务器。
  • 一个域名(免费选项如 DuckDNS,或付费选项如 Namecheap/GoDaddy)。
  • Docker 和 DNS 配置的基础知识。

Nginx Proxy Manager 步骤

  1. 创建 Nginx 文件目录:

    mkdir ~/nginx_config
    cd ~/nginx_config
  2. 使用 Docker 设置 Nginx Proxy Manager:

    nano docker-compose.yml
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt

运行容器:

docker-compose up -d
  1. 配置 DNS 和域名:

    • 登录您的域名提供商(例如 DuckDNS)并创建一个域名。
    • 将域名指向代理服务器的局域网 IP(例如 192.168.0.6)。
    • 如果使用 DuckDNS,请从其仪表板获取 API 令牌。
这里有一个关于在 https://www.duckdns.org/domains 中如何操作的简单示例
  1. 设置 SSL 证书:
  • 访问 Nginx Proxy Manager,地址为 http://server_ip:81。例如:192.168.0.6:81

  • 使用默认凭据(admin@example.com / changeme)登录。根据提示更改凭据。

  • 转到 SSL Certificates → Add SSL Certificate → Let's Encrypt。

  • 填写您的电子邮件以及从 DuckDNS 获取的域名。一个域名包含星号,另一个不包含。示例:*.hello.duckdns.orghello.duckdns.org

  • 选择 Use a DNS challenge,选择 DuckDNS,然后粘贴您的 API 令牌。示例: dns_duckdns_token=f4e2a1b9-c78d-e593-b0d7-67f2e1c9a5b8

  • 同意 Let’s Encrypt 条款并保存。如果需要,可以更改传播时间(120 秒)。

  1. 创建代理主机 (Proxy Hosts):
  • 对于每个服务(例如 openwebui、nextcloud),转到 Hosts → Proxy Hosts → Add Proxy Host。

  • 填写域名(例如 openwebui.hello.duckdns.org)。

  • 将方案 (Scheme) 设置为 HTTP(默认),启用 Websockets support 并指向您的 Docker IP(如果运行 open-webui 的 Docker 与 NGINX 管理器在同一台计算机上运行,则此 IP 将与之前的相同,例如:192.168.0.6)。

  • 选择之前生成的 SSL 证书,启用 Force SSL 和 HTTP/2。

关键:为 WebSocket 连接配置 CORS

WebSocket 连接中一个非常常见且难以调试的问题是跨源资源共享 (CORS) 策略配置不当。当在 Nginx Proxy Manager 等反向代理后面运行 Open WebUI 时,您 必须 在 Open WebUI 配置中设置 CORS_ALLOW_ORIGIN 环境变量。

如果不这样做,即使您在 Nginx Proxy Manager 中启用了 "Websockets support",WebSocket 连接也会失败。

缓存最佳实践

虽然 Nginx Proxy Manager 会自动处理大部分配置,但请注意:

  • 静态资源(CSS、JS、图像)默认会被缓存以获得更好的性能。
  • 身份验证端点 绝不应该被缓存。
  • 如果您在 NPM 的 "Advanced" 选项卡中添加自定义缓存规则,请确保排除以下路径:/api//auth//signup//signin//sso//admin//signout//oauth//login//logout/

默认的 NPM 配置已正确处理此问题 —— 除非您非常清楚自己在做什么,否则请勿修改缓存设置。

示例: 如果您通过 https://openwebui.hello.duckdns.org 访问 UI,您必须设置:

CORS_ALLOW_ORIGIN="https://openwebui.hello.duckdns.org"

下一步

设置 HTTPS 后,通过以下方式安全访问 Open WebUI:

如果您使用的是域名,请确保您的 DNS 记录已正确配置。对于生产环境,建议使用 Let's Encrypt 以获得受信任的 SSL 证书。