Skip to content
BotServBotServ
OllamaReverse ProxyNginxTraefikCaddy

Ollama detrás de un Reverse Proxy

Ollama seguro con Nginx, Traefik o Caddy. SSL, DNS, balanceo de carga y autenticación.

S

schutzgeist

3 min read
Ollama detrás de un Reverse Proxy

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_timeout muy 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

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

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.

Volver al blog
Share:

Entradas relacionadas