Ollama detrás de un Reverse-Proxy
Qué cubre este artículo sobre Reverse-Proxies para Ollama
- Por qué un Reverse-Proxy tiene sentido para Ollama.
- Configuraciones para nginx, Traefik y Caddy.
- TLS y DNS.
- Timeouts y Streaming.
- Autenticación en el Proxy.
Introducción: Ollama detrás de un Reverse-Proxy
Si quieres hacer Ollama accesible desde otros dispositivos o desde Internet, no deberías exponer el puerto de Ollama directamente. Un Reverse-Proxy se interpone en el camino y proporciona TLS, autenticación, logging y gestión más simple. Los proxies populares son nginx, Traefik y Caddy. Con la configuración correcta, Ollama funciona de forma segura y estable detrás del proxy.
Este artículo muestra configuraciones típicas de Reverse-Proxy para Ollama.
Términos importantes
- Reverse-Proxy: Intermediación de solicitudes de cliente hacia el backend.
- TLS: Cifrado de comunicaciones.
- Upstream: Servidor backend, en este caso Ollama.
- Timeout: Límite de tiempo para respuestas.
- Load Balancing: Distribución entre múltiples instancias.
- Middleware: Funcionalidad adicional como autenticación.
- Stream: Entrega sucesiva de tokens.
- Proxy Buffering: Almacenamiento temporal de respuestas.
¿Por qué un Reverse-Proxy?
- Cifrado TLS.
- Autenticación centralizada.
- Logging y Monitoring.
- Nombres DNS sencillos.
- Sin exposición directa del puerto de Ollama.
- Load Balancing con múltiples instancias de Ollama.
nginx
server {
listen 443 ssl;
server_name ollama.example.com;
ssl_certificate /etc/letsencrypt/live/ollama.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ollama.example.com/privkey.pem;
location / {
proxy_pass http://localhost:11434;
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_read_timeout 300s;
proxy_buffering off;
}
}
proxy_buffering off es esencial para el Streaming.
Caddy
ollama.example.com {
reverse_proxy localhost:11434
}
Caddy obtiene y renueva TLS automáticamente.
Traefik
services:
ollama:
image: ollama/ollama
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.ollama.rule=Host(`ollama.example.com`)
- traefik.http.routers.ollama.tls=true
- traefik.http.routers.ollama.tls.certresolver=letsencrypt
- traefik.http.services.ollama.loadbalancer.server.port=11434
networks:
proxy:
external: true
Autenticación en el Proxy
Traefik BasicAuth
labels:
- traefik.http.middlewares.ollama-auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
- traefik.http.routers.ollama.middlewares=ollama-auth
nginx BasicAuth
htpasswd -c /etc/nginx/.htpasswd admin
location / {
auth_basic "Ollama";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:11434;
}
Timeouts para Streaming
Las respuestas largas requieren timeouts generosos:
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_connect_timeout 60s;
CORS
Si un frontend web accede al proxy:
add_header Access-Control-Allow-Origin "https://frontend.example.com";
add_header Access-Control-Allow-Headers "authorization, content-type";
Load Balancing
Con múltiples instancias de Ollama:
upstream ollama {
server ollama1:11434;
server ollama2:11434;
}
server {
location / {
proxy_pass http://ollama;
}
}
Recomendaciones
- Activa TLS siempre.
- Establece timeouts altos.
- Desactiva el buffering para Streaming.
- Configura autenticación.
- Registra correctamente el DNS.
- Revisa los logs regularmente.
- Añade Rate-Limiting.
Errores comunes
- Streaming no funciona: Falta
proxy_buffering off. - Timeout:
proxy_read_timeoutmuy bajo. - Sin TLS: Comunicación sin cifrar.
- Errores CORS: Faltan headers.
- Autenticación débil: Contraseña de BasicAuth insuficiente.
- Redirección incorrecta: Ruta no configurada correctamente.
Enlaces y recursos
- BotServ.de Ollama Acceso remoto
- BotServ.de Docker Reverse Proxy
- BotServ.de Docker Certificados TLS
- BotServ.de Solución de problemas de API Ollama
FAQ: Ollama detrás de un Reverse-Proxy
¿Necesito TLS obligatoriamente? Sí, si el acceso viene desde Internet.
¿Cuál es el proxy más simple? Caddy para TLS automático, Traefik para integración con Docker.
¿Por qué se corta la respuesta? Probablemente el timeout sea muy bajo.
¿Funciona el Streaming a través del proxy? Sí, si el buffering está desactivado y los timeouts son suficientemente altos.
¿Cómo autentico usuarios? Lo mejor es a través de middleware del proxy como BasicAuth o Authelia.
Fuentes y lecturas adicionales
- nginx reverse proxy: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
- Caddy: https://caddyserver.com/docs/quick-starts/reverse-proxy
- Traefik: https://doc.traefik.io/traefik/getting-started/quick-start/
Resumen: Ollama detrás de un Reverse-Proxy
Un Reverse-Proxy hace que Ollama sea seguro, accesible y fácil de usar. nginx, Traefik y Caddy son soluciones consolidadas que ofrecen TLS, autenticación y logging. Con Ollama es importante establecer timeouts altos y desactivar el buffering para que el Streaming funcione correctamente. Al colocar un proxy con TLS y protección de acceso frente a Ollama, evitas el riesgo de exponer una API abierta y sin protección.


