Por MV2 de Munim, Inc. Comprobado el 12 de octubre de 2026 con la documentación de autenticación de Ollama, las preguntas frecuentes de Ollama, la documentación de credenciales de Ollama en n8n, la documentación de la API de Open WebUI y la documentación de matchers de Caddy. Solo para sus propias máquinas. Esta página se tradujo con IA del original en inglés; si hay diferencias, prevalece el original.
OLLAMA_API_KEY es para ollama.com, la nube de Ollama. Se crea en sus ajustes de ollama.com y se envía a https://ollama.com/api. No protege su propio servidor.http://localhost:11434 does not require authentication» (la API local no requiere autenticación). No hay ningún ajuste que la active. Cualquiera que llegue al puerto 11434 puede ejecutar prompts en su GPU y descargar, crear o borrar modelos.127.0.0.1 y haga que la única entrada sea un proxy inverso que compruebe una cabecera Authorization: Bearer <key>. Esa cabecera es la que envían los clientes al estilo de OpenAI, n8n y Open WebUI cuando rellena un campo «API key».Si Ollama solo se usa en la máquina donde se ejecuta, no necesita nada de esto. Déjelo en 127.0.0.1; la lista de comprobación para asegurarlo muestra cómo confirmarlo.
Open WebUI reenvía peticiones a Ollama bajo /ollama/ y comprueba sus propias claves de API. Ollama sigue siendo interno y no necesita software adicional.
sk-). Si no ve la opción, un administrador tiene que permitir antes las claves de API; consulte la documentación de claves de API de Open WebUI.curl https://webui.example.home/ollama/api/tags -H "Authorization: Bearer sk-..."o use el endpoint compatible con OpenAI de Open WebUI,
/api/chat/completions.https://webui.example.home/ollama y como API Key la clave sk-. La documentación de n8n cita Open WebUI como ejemplo de esta configuración.La clave lleva los permisos de ese usuario de Open WebUI, así que cree un usuario distinto para cada aplicación y mantenga Open WebUI actualizado (vea los avisos de seguridad de Open WebUI (en inglés)).
Ollama debe escuchar en 127.0.0.1:11434 (el valor por defecto). Si antes definió OLLAMA_HOST=0.0.0.0, deshágalo como en el paso 2 de la lista de comprobación. Si no, cualquiera puede saltarse el proxy yendo directamente al puerto 11434. Después genere una clave aleatoria larga:
openssl rand -hex 32 # or python3 -c "import secrets; print(secrets.token_urlsafe(32))"
(Basta con uno de los dos comandos.)
Caddy obtiene por sí solo un certificado HTTPS cuando ollama.example.com es un dominio real que apunta a esta máquina. Sustituya el dominio y PASTE_YOUR_KEY_HERE (por su clave):
ollama.example.com {
@key header Authorization "Bearer PASTE_YOUR_KEY_HERE"
handle @key {
reverse_proxy 127.0.0.1:11434 {
header_up Host localhost:11434
header_up -Authorization
}
}
handle {
respond "Missing or wrong API key" 401
}
}
header compara de forma exacta, así que solo pasa Bearer, un espacio y su clave exacta. Para dar a cada persona o aplicación su propia clave, añada más líneas header Authorization "Bearer ..." en un bloque @key { ... }. Caddy combina con O los valores de una misma cabecera.header_up Host localhost:11434 sigue el ejemplo de proxy de las preguntas frecuentes de Ollama; Ollama puede rechazar peticiones que llegan con otros valores de Host. header_up -Authorization evita que su clave se reenvíe a Ollama.flush_interval -1 dentro del bloque reverse_proxy.sudo chown root:caddy /etc/caddy/Caddyfile && sudo chmod 640 /etc/caddy/Caddyfile && sudo systemctl reload caddyNombre solo de red local (como ollama.home): no hay certificado público, así que use tls internal dentro del bloque del sitio e instale el certificado raíz de Caddy en sus clientes. O prescinda del proxy y use una red privada como Tailscale o WireGuard (vea Usar Ollama en remoto). No envíe la clave por http:// sin cifrar en una red en la que no confía; cualquiera en esa red podría leerla.
Ponga esto en /etc/nginx/conf.d/ollama.conf. Los archivos de conf.d se leen dentro del bloque http, que es donde va map. Use sus propias rutas de certificado, por ejemplo las de certbot:
map $http_authorization $ollama_key_ok {
default 0;
"Bearer PASTE_YOUR_KEY_HERE" 1;
}
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 / {
if ($ollama_key_ok = 0) { return 401; }
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host localhost:11434;
proxy_set_header Authorization ""; # don't pass the key on to Ollama
proxy_buffering off; # stream tokens as they come
proxy_read_timeout 600s; # long generations
client_max_body_size 0; # model uploads (ollama create)
}
}
(Los comentarios significan, en orden: no reenviar la clave a Ollama; enviar los tokens a medida que llegan; permitir generaciones largas; permitir subir modelos con ollama create.) Añada una línea al map por cada clave extra. Luego ejecute sudo nginx -t && sudo systemctl reload nginx y haga que solo root pueda leer el archivo (sudo chmod 600 /etc/nginx/conf.d/ollama.conf; nginx lo lee como root al arrancar).
No dé ningún ports: al servicio ollama y publique solo Caddy. En el Caddyfile de arriba, use reverse_proxy ollama:11434. Añada sus ajustes de GPU habituales al servicio ollama.
services:
ollama:
image: ollama/ollama
volumes: [ "ollama:/root/.ollama" ]
# no "ports:" - only containers on this network can reach it
caddy:
image: caddy:2
ports: [ "80:80", "443:443" ]
volumes: [ "./Caddyfile:/etc/caddy/Caddyfile:ro", "caddy_data:/data" ]
volumes:
ollama: {}
caddy_data: {}
(El comentario significa: sin «ports:», solo los contenedores de esta red llegan a Ollama.)
# no key: should print 401
curl -s -o /dev/null -w "%{http_code}\n" https://ollama.example.com/api/version
# with the key: should print {"version":"..."}
curl -H "Authorization: Bearer YOUR_KEY" https://ollama.example.com/api/version
# from ANOTHER machine, straight to Ollama: should fail to connect
curl http://<server LAN IP>:11434/api/version
(Lo esperado: sin clave, 401; con la clave, la versión; y desde OTRA máquina directamente a Ollama, la conexión debe fallar. YOUR_KEY es su clave y <server LAN IP> la IP local del servidor.) Si el último comando responde con una versión, el proxy se puede saltar. Revise otra vez OLLAMA_HOST y los ports: de Docker. En Linux, ufw no bloquea los puertos que publica Docker.
https://ollama.example.com y escriba la clave en su campo Key (se envía como token Bearer). Si su versión no tiene campo de clave para las conexiones de Ollama, añádala en su lugar como conexión OpenAI API con la URL https://ollama.example.com/v1 y la clave.https://ollama.example.com y como API Key su clave. n8n la envía como Authorization: Bearer.https://ollama.example.com/v1 y como clave de API su clave.
from openai import OpenAI
client = OpenAI(base_url="https://ollama.example.com/v1", api_key="YOUR_KEY")
reply = client.chat.completions.create(
model="llama3.2", messages=[{"role": "user", "content": "Hello"}])
print(reply.choices[0].message.content)from ollama import Client
client = Client(host="https://ollama.example.com",
headers={"Authorization": "Bearer YOUR_KEY"})
print(client.list())ollama: a fecha de esta comprobación no hay una forma documentada de hacer que envíe su propia clave a un host personalizado. Ejecútelo en el propio servidor, o use curl o las bibliotecas de arriba.basic_auth de la lista de comprobación funciona para navegadores y curl -u, pero los clientes al estilo de OpenAI, n8n y Open WebUI envían Authorization: Bearer, así que la autenticación básica los rechaza. Para clientes de API, use la comprobación de clave de esta página.OLLAMA_ORIGINS restringido (comprobación del navegador (en inglés)).MV2 de Munim, Inc. ofrece una revisión de IA local de 49 USD para una máquina, o una revisión para oficinas pequeñas de 199 USD para hasta 5 máquinas o un servidor compartido de Ollama u Open WebUI. Recibe un informe escrito de lo que está expuesto, es arriesgado o va lento y qué arreglar primero, con los comandos exactos para su sistema operativo. El informe está en inglés. Vea un informe de ejemplo (en inglés). Pague 49 USD o pague 199 USD en Stripe y después envíe a munimversion2@gmail.com la salida de python3 local_ai_checkup.py --json del script gratuito local-ai-checkup, su sistema operativo y para qué lo usa. MV2 nunca pide contraseñas, claves ni acceso remoto, así que no envíe su clave de API.