此教程由社区贡献,未得到 OpenWebUI 团队的支持。它仅作为如何根据特定需求定制 OpenWebUI 的示例。想要贡献?请参阅贡献指南。
使用 Nginx 实现 HTTPS
确保用户与 Open WebUI 之间的通信安全至关重要。HTTPS(超文本传输安全协议)加密传输的数据,防止窃听和篡改。通过将 Nginx 配置为反向代理,您可以无缝地为 Open WebUI 部署添加 HTTPS,从而增强安全性和可信度。
本指南提供了两种设置 HTTPS 的方法:
- 自签名证书:适用于开发和内部使用。
- Let's Encrypt:适用于需要受信任 SSL 证书的生产环境。
请选择最适合您部署需求的方法。
- 自签名证书
- Let's Encrypt
自签名证书
在信任问题不是关键的开发或内部使用场景中,使用自签名证书是合适的。
步骤
-
创建 Nginx 文件目录:
mkdir -p conf.d ssl
-
创建 Nginx 配置文件:
conf.d/open-webui.conf
:server {
listen 443 ssl;
server_name your_domain_or_IP;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://host.docker.internal: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;
# (可选)禁用代理缓冲以获得更好的模型流式响应
proxy_buffering off;
}
} -
生成自签名 SSL 证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ssl/nginx.key \
-out ssl/nginx.crt \
-subj "/CN=your_domain_or_IP" -
更新 Docker Compose 配置:
将 Nginx 服务添加到你的
docker-compose.yml
文件中:services:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- open-webui -
启动 Nginx 服务:
docker compose up -d nginx
访问 WebUI
通过 HTTPS 访问 Open WebUI:
Let's Encrypt
Let's Encrypt 提供了大多数浏览器信任的免费 SSL 证书,非常适合生产环境使用。
前提条件
- 系统上已安装 Certbot。
- DNS 记录正确配置以指向您的服务器。
步骤
-
创建 Nginx 文件目录:
mkdir -p conf.d ssl
-
创建 Nginx 配置文件:
conf.d/open-webui.conf
:server {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://host.docker.internal:3000;
# 添加 WebSocket 支持(对于版本 0.5.0 及以上是必需的)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
# (可选)禁用代理缓冲以获得更好的模型流式响应
proxy_buffering off;
}
} -
简化 Let's Encrypt 脚本:
enable_letsencrypt.sh
:#!/bin/bash
# 描述:使用 Certbot 获取并安装 Let's Encrypt SSL 证书的简化脚本。
DOMAIN="your_domain_or_IP"
EMAIL="your_email@example.com"
# 如果未安装 Certbot,则进行安装
if ! command -v certbot &> /dev/null; then
echo "未找到 Certbot。正在安装..."
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
fi
# 获取 SSL 证书
sudo certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos -m "$EMAIL"
# 重新加载 Nginx 以应用更改
sudo systemctl reload nginx
echo "Let's Encrypt SSL 证书已安装,Nginx 已重新加载。"使脚本具有可执行权限:
chmod +x enable_letsencrypt.sh
-
更新 Docker Compose 配置:
在
docker-compose.yml
中添加 Nginx 服务:services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- open-webui -
启动 Nginx 服务:
docker compose up -d nginx
-
运行 Let's Encrypt 脚本:
执行脚本以获取并安装 SSL 证书:
./enable_letsencrypt.sh
访问 WebUI
通过 HTTPS 访问 Open WebUI:
下一步
设置好 HTTPS 后,您可以通过以下地址安全访问 Open WebUI:
如果您使用域名,请确保 DNS 记录配置正确。对于生产环境,建议使用 Let's Encrypt 获取受信任的 SSL 证书。