Dieses Tutorial ist ein Community-Beitrag und wird vom Open WebUI-Team nicht unterstützt. Es dient lediglich als Demonstration, wie Open WebUI für Ihren spezifischen Anwendungsfall angepasst werden kann. Möchten Sie beitragen? Schauen Sie sich das Tutorial zum Beitragen an.
HTTPS mit Nginx
Die Gewährleistung einer sicheren Kommunikation zwischen Ihren Benutzern und Open WebUI ist von größter Bedeutung. HTTPS (HyperText Transfer Protocol Secure) verschlüsselt die übertragenen Daten und schützt sie so vor Lauschangriffen und Manipulation. Durch die Konfiguration von Nginx als Reverse-Proxy können Sie nahtlos HTTPS zu Ihrer Open WebUI-Bereitstellung hinzufügen und so sowohl die Sicherheit als auch die Vertrauenswürdigkeit verbessern.
Diese Anleitung bietet drei Methoden zur Einrichtung von HTTPS
- Selbstsignierte Zertifikate: Ideal für Entwicklung und interne Nutzung, mit Docker.
- Let's Encrypt: Perfekt für Produktionsumgebungen, die vertrauenswürdige SSL-Zertifikate benötigen, mit Docker.
- Windows+Selbstsigniert: Vereinfachte Anweisungen für Entwicklung und interne Nutzung unter Windows, ohne Docker.
Wählen Sie die Methode, die am besten zu Ihren Bereitstellungsanforderungen passt.
- Nginx Proxy Manager
- Let's Encrypt
- Selbstsigniert
- Windows
Nginx Proxy Manager
Nginx Proxy Manager (NPM) ermöglicht es Ihnen, Reverse-Proxies einfach zu verwalten und Ihre lokalen Anwendungen wie Open WebUI mit gültigen SSL-Zertifikaten von Let's Encrypt zu sichern. Diese Einrichtung ermöglicht HTTPS-Zugriff, der für die Nutzung von Spracheingabefunktionen auf vielen mobilen Browsern aufgrund ihrer Sicherheitsanforderungen erforderlich ist, ohne den spezifischen Port der Anwendung direkt dem Internet auszusetzen.
Voraussetzungen
- Ein Heimserver, auf dem Docker und ein Open-WebUI-Container laufen.
- Ein Domainname (kostenlose Optionen wie DuckDNS oder kostenpflichtige wie Namecheap/GoDaddy).
- Grundlegende Kenntnisse in Docker und DNS-Konfiguration.
Schritte
-
Verzeichnisse für Nginx-Dateien erstellen
mkdir ~/nginx_config
cd ~/nginx_config -
Nginx Proxy Manager mit Docker einrichten
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
Container ausführen
docker-compose up -d
-
DNS und Domain konfigurieren
- Melden Sie sich bei Ihrem Domainanbieter (z. B. DuckDNS) an und erstellen Sie eine Domain.
- Zeigen Sie mit der Domain auf die lokale IP Ihres Proxys (z. B. 192.168.0.6).
- Wenn Sie DuckDNS verwenden, holen Sie sich ein API-Token aus deren Dashboard.
Hier ist ein einfaches Beispiel, wie es unter https://www.duckdns.org/domains gemacht wird:
- SSL-Zertifikate einrichten
- Greifen Sie auf Nginx Proxy Manager unter http://server_ip:81 zu. Beispiel:
192.168.0.6:81 - Melden Sie sich mit den Standardanmeldedaten an (admin@example.com / changeme). Ändern Sie diese, wenn Sie dazu aufgefordert werden.
- Gehen Sie zu SSL-Zertifikate → SSL-Zertifikat hinzufügen → Let's Encrypt.
- Geben Sie Ihre E-Mail-Adresse und den Domainnamen ein, den Sie von DuckDNS erhalten haben. Ein Domainname enthält ein Sternchen und ein anderer nicht. Beispiel:
*.hello.duckdns.orgundhello.duckdns.org. - Wählen Sie "DNS-Challenge verwenden", wählen Sie DuckDNS und fügen Sie Ihr API-Token ein. Beispiel:
dns_duckdns_token=f4e2a1b9-c78d-e593-b0d7-67f2e1c9a5b8 - Stimmen Sie den Let's Encrypt-Bedingungen zu und speichern Sie. Ändern Sie die Übertragungszeit **falls erforderlich** (120 Sekunden).
- Proxy-Hosts erstellen
- Gehen Sie für jeden Dienst (z. B. openwebui, nextcloud) zu Hosts → Proxy-Hosts → Proxy-Host hinzufügen.
- Füllen Sie den Domainnamen aus (z. B. openwebui.hello.duckdns.org).
- Stellen Sie das Schema auf HTTP (Standard), aktivieren Sie
Websocket-Unterstützungund zeigen Sie auf Ihre Docker-IP (wenn Docker mit Open-WebUI auf demselben Computer wie NGINX-Manager läuft, ist dies dieselbe IP wie zuvor (Beispiel:192.168.0.6). - Wählen Sie das zuvor generierte SSL-Zertifikat aus, erzwingen Sie SSL und aktivieren Sie HTTP/2.
- Fügen Sie Ihre URL zu Open WebUI hinzu (andernfalls erhalten Sie einen HTTPS-Fehler)
- Gehen Sie zu Ihrem Open WebUI → Admin-Panel → Einstellungen → Allgemein
- Geben Sie im Textfeld Webhook-URL die URL ein, über die Sie sich über den Nginx-Reverse-Proxy mit Ihrem Open WebUI verbinden werden. Beispiel:
hello.duckdns.org(bei dieser nicht unbedingt erforderlich) oderopenwebui.hello.duckdns.org(bei dieser unbedingt erforderlich).
Greifen Sie auf die WebUI zu:
Greifen Sie über HTTPS auf Open WebUI zu unter hello.duckdns.org oder openwebui.hello.duckdns.org (je nachdem, wie Sie es eingerichtet haben).
Hinweis zur Firewall: Beachten Sie, dass lokale Firewall-Software (wie Portmaster) interne Docker-Netzwerkdaten oder erforderliche Ports blockieren kann. Wenn Sie Probleme haben, überprüfen Sie Ihre Firewall-Regeln, um sicherzustellen, dass die für diese Einrichtung erforderliche Kommunikation zugelassen wird.
Let's Encrypt
Let's Encrypt bietet kostenlose SSL-Zertifikate, die von den meisten Browsern vertrauenswürdig sind und sich ideal für Produktionsumgebungen eignen.
Voraussetzungen
- Certbot auf Ihrem System installiert.
- DNS-Einträge, die korrekt auf Ihren Server verweisen.
Schritte
-
Verzeichnisse für Nginx-Dateien erstellen
mkdir -p conf.d ssl -
Nginx-Konfigurationsdatei erstellen
conf.d/open-webui.conf:server {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://host.docker.internal:3000;
# Add WebSocket support (Necessary for version 0.5.0 and up)
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;
# (Optional) Disable proxy buffering for better streaming response from models
proxy_buffering off;
# (Optional) Increase max request size for large attachments and long audio messages
client_max_body_size 20M;
proxy_read_timeout 10m;
}
} -
Vereinfachtes Let's Encrypt-Skript
enable_letsencrypt.sh:#!/bin/bash
# Description: Simplified script to obtain and install Let's Encrypt SSL certificates using Certbot.
DOMAIN="your_domain_or_IP"
EMAIL="your_email@example.com"
# Install Certbot if not installed
if ! command -v certbot &> /dev/null; then
echo "Certbot not found. Installing..."
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
fi
# Obtain SSL certificate
sudo certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos -m "$EMAIL"
# Reload Nginx to apply changes
sudo systemctl reload nginx
echo "Let's Encrypt SSL certificate has been installed and Nginx reloaded."Skript ausführbar machen
chmod +x enable_letsencrypt.sh -
Docker Compose-Konfiguration aktualisieren
Fügen Sie den Nginx-Dienst zu Ihrer
docker-compose.ymlhinzuservices:
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-Dienst starten
docker compose up -d nginx -
Let's Encrypt-Skript ausführen
Führen Sie das Skript aus, um das SSL-Zertifikat zu erhalten und zu installieren
./enable_letsencrypt.sh
Greifen Sie auf die WebUI zu
Greifen Sie über HTTPS auf Open WebUI zu unter
Selbstsigniertes Zertifikat
Die Verwendung von selbstsignierten Zertifikaten eignet sich für die Entwicklung oder den internen Gebrauch, wo Vertrauen keine kritische Rolle spielt.
Schritte
-
Verzeichnisse für Nginx-Dateien erstellen
mkdir -p conf.d ssl -
Nginx-Konfigurationsdatei erstellen
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;
# (Optional) Disable proxy buffering for better streaming response from models
proxy_buffering off;
# (Optional) Increase max request size for large attachments and long audio messages
client_max_body_size 20M;
proxy_read_timeout 10m;
}
} -
Selbstsignierte SSL-Zertifikate generieren
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-Konfiguration aktualisieren
Fügen Sie den Nginx-Dienst zu Ihrer
docker-compose.ymlhinzuservices:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- open-webui -
Nginx-Dienst starten
docker compose up -d nginx
Greifen Sie auf die WebUI zu
Greifen Sie über HTTPS auf Open WebUI zu unter
Verwendung eines selbstsignierten Zertifikats und Nginx unter Windows ohne Docker
Für grundlegende interne/Entwicklungsinstallationen können Sie Nginx und ein selbstsigniertes Zertifikat verwenden, um Open WebUI auf HTTPS zu proxieren, was die Nutzung von Funktionen wie Mikrofon-Eingabe über LAN ermöglicht. (Standardmäßig erlauben die meisten Browser keine Mikrofon-Eingabe auf unsicheren Nicht-localhost-URLs).
Diese Anleitung geht davon aus, dass Sie Open WebUI mit pip installiert haben und open-webui serve ausführen.
Schritt 1: Installation von OpenSSL zur Zertifikatgenerierung
Sie müssen zuerst OpenSSL installieren.
Sie können vorkompilierte Binärdateien von der Shining Light Productions (SLP)-Website herunterladen und installieren.
Alternativ können Sie Chocolatey verwenden, wenn Sie es installiert haben, um OpenSSL schnell zu installieren.
- Öffnen Sie eine Eingabeaufforderung oder PowerShell.
- Führen Sie den folgenden Befehl aus, um OpenSSL zu installieren
choco install openssl -y
Installation überprüfen
Öffnen Sie nach der Installation eine Eingabeaufforderung und geben Sie ein
openssl version
Wenn die OpenSSL-Version angezeigt wird (z. B. OpenSSL 3.x.x ...), ist es korrekt installiert.
Schritt 2: Installation von Nginx
Laden Sie das offizielle Nginx für Windows von nginx.org herunter oder verwenden Sie einen Paketmanager wie Chocolatey. Extrahieren Sie die heruntergeladene ZIP-Datei in ein Verzeichnis (z. B. C:\nginx).
Schritt 3: Zertifikat generieren
Führen Sie den folgenden Befehl aus
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt
Verschieben Sie die generierten nginx.key- und nginx.crt-Dateien in einen Ordner Ihrer Wahl oder in das Verzeichnis C:\nginx.
Schritt 4: Nginx konfigurieren
Öffnen Sie C:\nginx\conf\nginx.conf in einem Texteditor.
Wenn Sie möchten, dass Open WebUI über Ihr lokales LAN erreichbar ist, notieren Sie sich Ihre LAN-IP-Adresse mit ipconfig, z. B. 192.168.1.15.
Richten Sie es wie folgt ein
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 120;
#gzip on;
# needed to properly handle websockets (streaming)
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Redirect all HTTP traffic to HTTPS
server {
listen 80;
server_name 192.168.1.15;
return 301 https://$host$request_uri;
}
# Handle HTTPS traffic
server {
listen 443 ssl;
server_name 192.168.1.15;
# SSL Settings (ensure paths are correct)
ssl_certificate C:\\nginx\\nginx.crt;
ssl_certificate_key C:\\nginx\\nginx.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
# OCSP Stapling
#ssl_stapling on;
#ssl_stapling_verify on;
# Proxy settings to your local service
location / {
# proxy_pass should point to your running localhost version of open-webui
proxy_pass https://:8080;
# Add WebSocket support (Necessary for version 0.5.0 and up)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $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;
# (Optional) Disable proxy buffering for better streaming response from models
proxy_buffering off;
# (Optional) Increase max request size for large attachments and long audio messages
client_max_body_size 20M;
proxy_read_timeout 10m;
}
}
}
Speichern Sie die Datei und überprüfen Sie, ob die Konfiguration fehler- oder syntaktisch einwandfrei ist, indem Sie nginx -t ausführen. Möglicherweise müssen Sie zuerst zu cd C:\nginx wechseln, je nachdem, wie Sie es installiert haben.
Starten Sie Nginx, indem Sie nginx ausführen. Wenn ein Nginx-Dienst bereits läuft, können Sie die neue Konfiguration neu laden, indem Sie nginx -s reload ausführen.
Sie sollten nun auf Open WebUI unter https://192.168.1.15 (oder Ihrer eigenen LAN-IP entsprechend) zugreifen können. Stellen Sie sicher, dass Sie den Windows-Firewall-Zugriff bei Bedarf zulassen.
Nächste Schritte
Nachdem Sie HTTPS eingerichtet haben, greifen Sie sicher auf Open WebUI zu unter
Stellen Sie sicher, dass Ihre DNS-Einträge korrekt konfiguriert sind, wenn Sie einen Domainnamen verwenden. Für Produktionsumgebungen wird die Verwendung von Let's Encrypt für vertrauenswürdige SSL-Zertifikate empfohlen.