From 6ecf9275e40121cc82dc9aa47ef3e106791c7923 Mon Sep 17 00:00:00 2001 From: DrMelone <27028174+Classic298@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:41:45 +0100 Subject: [PATCH] nginx --- docs/troubleshooting/performance.md | 40 +++++ docs/tutorials/https/nginx.md | 145 ++++++++++++++++++ docs/tutorials/tab-nginx/LetsEncrypt.md | 7 +- docs/tutorials/tab-nginx/NginxProxyManager.md | 14 ++ docs/tutorials/tab-nginx/SelfSigned.md | 6 +- docs/tutorials/tab-nginx/Windows.md | 6 +- 6 files changed, 215 insertions(+), 3 deletions(-) diff --git a/docs/troubleshooting/performance.md b/docs/troubleshooting/performance.md index e20ba134..678eb956 100644 --- a/docs/troubleshooting/performance.md +++ b/docs/troubleshooting/performance.md @@ -176,8 +176,48 @@ Defines the number of worker threads available for handling requests. - **Env Var**: `THREAD_POOL_SIZE=2000` +#### AIOHTTP Client Timeouts +Long LLM completions can exceed default HTTP client timeouts. Configure these to prevent requests being cut off mid-response: + +- **Env Var**: `AIOHTTP_CLIENT_TIMEOUT=1800` (30 minutes for completions) +- **Env Var**: `AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=15` (shorter for model listing) +- **Env Var**: `AIOHTTP_CLIENT_TIMEOUT_OPENAI_MODEL_LIST=15` + +#### Container Resource Limits +For Docker deployments, ensure adequate resource allocation: + +```yaml +deploy: + resources: + limits: + memory: 8G # Adjust based on usage + cpus: '4.0' + reservations: + memory: 4G + cpus: '2.0' + +# Increase file descriptor limits +ulimits: + nofile: + soft: 65536 + hard: 65536 +``` + +**Diagnosis commands:** +```bash +# Check container resource usage +docker stats openwebui --no-stream + +# Check connection states +docker exec openwebui netstat -an | grep -E "ESTABLISHED|TIME_WAIT|CLOSE_WAIT" | sort | uniq -c + +# Check open file descriptors +docker exec openwebui ls -la /proc/1/fd | wc -l +``` + --- + ## ☁️ Cloud Infrastructure Latency When deploying Open WebUI in cloud Kubernetes environments (AKS, EKS, GKE), you may notice significant performance degradation compared to local Kubernetes (Rancher Desktop, kind, Minikube) or bare-metal deployments—even with identical resource allocations. This is almost always caused by **latency** in the underlying infrastructure. diff --git a/docs/tutorials/https/nginx.md b/docs/tutorials/https/nginx.md index dafa1c95..88dd3b12 100644 --- a/docs/tutorials/https/nginx.md +++ b/docs/tutorials/https/nginx.md @@ -89,6 +89,151 @@ import Windows from '../tab-nginx/Windows.md'; +## Complete Optimized NGINX Configuration + +This section provides a production-ready NGINX configuration optimized for Open WebUI streaming, WebSocket connections, and high-concurrency deployments. + +### Upstream Configuration + +Define an upstream with keepalive connections to reduce connection setup overhead: + +```nginx +upstream openwebui { + server 127.0.0.1:3000; + keepalive 128; # Persistent connections + keepalive_timeout 1800s; # 30 minutes + keepalive_requests 10000; +} +``` + +### Timeout Configuration + +Long-running LLM completions require extended timeouts: + +```nginx +location /api/ { + proxy_connect_timeout 1800; # 30 minutes + proxy_send_timeout 1800; + proxy_read_timeout 1800; +} + +# WebSocket connections need even longer timeouts +location ~ ^/(ws/|socket\.io/) { + proxy_connect_timeout 86400; # 24 hours + proxy_send_timeout 86400; + proxy_read_timeout 86400; +} +``` + +### Header and Body Size Limits + +Prevent errors with large requests or OAuth tokens: + +```nginx +# In http {} or server {} block +client_max_body_size 100M; # Large file uploads +proxy_buffer_size 128k; # Large headers (OAuth tokens) +proxy_buffers 4 256k; +proxy_busy_buffers_size 256k; +large_client_header_buffers 4 32k; +``` + +### Common Streaming Mistakes + +| Setting | Impact on Streaming | +|---------|---------------------| +| `gzip on` with `application/json` | 🔴 Buffers for compression | +| `proxy_buffering on` | 🔴 Buffers entire response | +| `tcp_nopush on` | 🔴 Waits for full packets | +| `chunked_transfer_encoding on` | 🟡 Can break SSE | +| `proxy_cache` enabled on `/api/` | 🟡 Adds overhead | + +### Full Example Configuration + +```nginx +upstream openwebui { + server 127.0.0.1:3000; + keepalive 128; + keepalive_timeout 1800s; + keepalive_requests 10000; +} + +server { + listen 443 ssl http2; + server_name your-domain.com; + + # SSL configuration... + + # Compression - EXCLUDE streaming content types + gzip on; + gzip_types text/plain text/css application/javascript image/svg+xml; + # DO NOT include: application/json, text/event-stream + + # API endpoints - streaming optimized + location /api/ { + proxy_pass http://openwebui; + 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; + + # CRITICAL: Disable all buffering for streaming + gzip off; + proxy_buffering off; + proxy_request_buffering off; + proxy_cache off; + tcp_nodelay on; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-store" always; + + # Extended timeouts for LLM completions + proxy_connect_timeout 1800; + proxy_send_timeout 1800; + proxy_read_timeout 1800; + } + + # WebSocket endpoints + location ~ ^/(ws/|socket\.io/) { + proxy_pass http://openwebui; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + gzip off; + proxy_buffering off; + proxy_cache off; + + # 24-hour timeout for persistent connections + proxy_connect_timeout 86400; + proxy_send_timeout 86400; + proxy_read_timeout 86400; + } + + # Static assets - CAN buffer and cache + location /static/ { + proxy_pass http://openwebui; + proxy_buffering on; + proxy_cache_valid 200 7d; + add_header Cache-Control "public, max-age=604800, immutable"; + } + + # Default location + location / { + proxy_pass http://openwebui; + proxy_http_version 1.1; + 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; + } +} +``` + +--- + ## Caching Configuration Proper caching significantly improves Open WebUI performance by reducing backend load and speeding up page loads. This section provides guidance for advanced users who want to implement server-side and client-side caching. diff --git a/docs/tutorials/tab-nginx/LetsEncrypt.md b/docs/tutorials/tab-nginx/LetsEncrypt.md index 2e17a4eb..21e3b7ce 100644 --- a/docs/tutorials/tab-nginx/LetsEncrypt.md +++ b/docs/tutorials/tab-nginx/LetsEncrypt.md @@ -270,7 +270,12 @@ With the certificate saved in your `ssl` directory, you can now update the Nginx 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_read_timeout 10m; + + # Extended timeout for long LLM completions (30 minutes) + proxy_read_timeout 1800; + proxy_send_timeout 1800; + proxy_connect_timeout 1800; + proxy_buffering off; proxy_cache off; client_max_body_size 20M; diff --git a/docs/tutorials/tab-nginx/NginxProxyManager.md b/docs/tutorials/tab-nginx/NginxProxyManager.md index 1f8c0cf1..93859dd5 100644 --- a/docs/tutorials/tab-nginx/NginxProxyManager.md +++ b/docs/tutorials/tab-nginx/NginxProxyManager.md @@ -94,6 +94,20 @@ Without this, Nginx re-chunks SSE streams, breaking markdown formatting (visible ::: +:::tip Extended Timeouts for Long Completions + +Long LLM completions (30+ minutes for complex tasks) may exceed the default 60-second timeout. Add these directives in the **Advanced** tab → **Custom Nginx Configuration**: + +```nginx +proxy_read_timeout 1800; +proxy_send_timeout 1800; +proxy_connect_timeout 1800; +``` + +This sets a 30-minute timeout. Adjust as needed for your use case. + +::: + :::tip Caching Best Practice While Nginx Proxy Manager handles most configuration automatically, be aware that: diff --git a/docs/tutorials/tab-nginx/SelfSigned.md b/docs/tutorials/tab-nginx/SelfSigned.md index aa024d57..369bd24a 100644 --- a/docs/tutorials/tab-nginx/SelfSigned.md +++ b/docs/tutorials/tab-nginx/SelfSigned.md @@ -83,7 +83,11 @@ Using self-signed certificates is suitable for development or internal use where proxy_cache off; client_max_body_size 20M; - proxy_read_timeout 10m; + + # Extended timeout for long LLM completions (30 minutes) + proxy_read_timeout 1800; + proxy_send_timeout 1800; + proxy_connect_timeout 1800; add_header Cache-Control "public, max-age=300, must-revalidate"; } diff --git a/docs/tutorials/tab-nginx/Windows.md b/docs/tutorials/tab-nginx/Windows.md index 3675c788..42a8763f 100644 --- a/docs/tutorials/tab-nginx/Windows.md +++ b/docs/tutorials/tab-nginx/Windows.md @@ -156,7 +156,11 @@ http { proxy_buffering off; proxy_cache off; client_max_body_size 20M; - proxy_read_timeout 10m; + + # Extended timeout for long LLM completions (30 minutes) + proxy_read_timeout 1800; + proxy_send_timeout 1800; + proxy_connect_timeout 1800; add_header Cache-Control "public, max-age=300, must-revalidate"; }