upstream openwebui { # server 10.43.14.141:80; server 51.210.13.240:3000; keepalive 128; keepalive_timeout 1800s; keepalive_requests 10000; } server { if ($host = llm.crenam.space) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name llm.crenam.space; # ou un autre sous-domaine return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name llm.crenam.space; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256'; ssl_prefer_server_ciphers off; gzip on; gzip_types text/plain text/css application/javascript image/svg+xml; 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 connections need even longer timeouts 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; } ssl_certificate /etc/letsencrypt/live/llm.crenam.space/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/llm.crenam.space/privkey.pem; # managed by Certbot }