Por MV2 da Munim, Inc. Conferido em 12 de outubro de 2026 com a documentação de autenticação do Ollama, o FAQ do Ollama, a documentação de credenciais do Ollama no n8n, a documentação da API do Open WebUI e a documentação de matchers do Caddy. Apenas para as suas próprias máquinas. Esta página foi traduzida com IA a partir do original em inglês; em caso de divergência, vale o original.
OLLAMA_API_KEY é para o ollama.com, a nuvem do Ollama. Você a cria nas configurações do ollama.com e a envia para https://ollama.com/api. Ela não protege o seu próprio servidor.http://localhost:11434 does not require authentication." (a API local não exige autenticação). Não há nenhuma configuração que ative um login. Qualquer pessoa que alcance a porta 11434 pode rodar prompts na sua GPU e baixar, criar ou apagar modelos.127.0.0.1 e faça de um proxy reverso que verifica um cabeçalho Authorization: Bearer <key> a única entrada. É esse cabeçalho que clientes no estilo OpenAI, o n8n e o Open WebUI enviam quando você preenche um campo "API key".Se o Ollama só é usado na máquina onde roda, você não precisa de nada disso. Deixe-o em 127.0.0.1; o checklist de proteção mostra como confirmar.
O Open WebUI repassa requisições ao Ollama em /ollama/ e verifica as próprias chaves de API. O Ollama continua interno, e você não precisa de software extra.
sk-). Se a opção não aparecer, um administrador precisa liberar as chaves de API antes; veja a documentação de chaves de API do Open WebUI.curl https://webui.example.home/ollama/api/tags -H "Authorization: Bearer sk-..."ou use o endpoint compatível com a OpenAI do Open WebUI,
/api/chat/completions.https://webui.example.home/ollama e a API Key como a chave sk-. A documentação do n8n cita o Open WebUI como exemplo dessa configuração.A chave leva as permissões daquele usuário do Open WebUI, então crie um usuário separado para cada app e mantenha o Open WebUI atualizado (veja os avisos de segurança do Open WebUI (em inglês)).
O Ollama precisa escutar em 127.0.0.1:11434 (o padrão). Se você definiu OLLAMA_HOST=0.0.0.0 antes, desfaça isso como no passo 2 do checklist. Senão, qualquer um pode pular o proxy indo direto à porta 11434. Depois gere uma chave aleatória longa:
openssl rand -hex 32 # or python3 -c "import secrets; print(secrets.token_urlsafe(32))"
(Basta um dos dois comandos.)
O Caddy obtém sozinho um certificado HTTPS quando ollama.example.com é um domínio real que aponta para esta máquina. Troque o domínio e PASTE_YOUR_KEY_HERE (pela sua chave):
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 exata, então só passa Bearer, um espaço e a sua chave exata. Para dar a cada pessoa ou app a própria chave, adicione mais linhas header Authorization "Bearer ..." num bloco @key { ... }. O Caddy combina com OU os valores do mesmo cabeçalho.header_up Host localhost:11434 segue o exemplo de proxy do FAQ do Ollama; o Ollama pode recusar requisições que chegam com outros valores de Host. header_up -Authorization impede que a sua chave seja repassada ao Ollama.flush_interval -1 dentro do bloco reverse_proxy.sudo chown root:caddy /etc/caddy/Caddyfile && sudo chmod 640 /etc/caddy/Caddyfile && sudo systemctl reload caddyNome só da rede local (como ollama.home): não existe certificado público, então use tls internal dentro do bloco do site e instale o certificado raiz do Caddy nos seus clientes. Ou dispense o proxy e use uma rede privada como Tailscale ou WireGuard (veja Usar o Ollama remotamente). Não envie a chave por http:// sem criptografia numa rede em que você não confia; qualquer pessoa nessa rede poderia lê-la.
Coloque isto em /etc/nginx/conf.d/ollama.conf. Os arquivos em conf.d são lidos dentro do bloco http, que é onde o map deve ficar. Use os seus próprios caminhos de certificado, por exemplo os do 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)
}
}
(Os comentários querem dizer, na ordem: não repassar a chave ao Ollama; enviar os tokens à medida que chegam; permitir gerações longas; permitir o envio de modelos com ollama create.) Adicione uma linha ao map para cada chave extra. Depois rode sudo nginx -t && sudo systemctl reload nginx e deixe o arquivo legível só para o root (sudo chmod 600 /etc/nginx/conf.d/ollama.conf; o nginx o lê como root na inicialização).
Não dê nenhum ports: ao serviço ollama e publique só o Caddy. No Caddyfile acima, use reverse_proxy ollama:11434. Adicione as suas configurações de GPU de sempre ao serviço 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: {}
(O comentário quer dizer: sem "ports:", só os contêineres desta rede alcançam o 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
(O esperado: sem chave, 401; com a chave, a versão; e de OUTRA máquina, direto no Ollama, a conexão deve falhar. YOUR_KEY é a sua chave e <server LAN IP> o IP local do servidor.) Se o último comando responder com uma versão, o proxy pode ser contornado. Confira de novo o OLLAMA_HOST e os ports: do Docker. No Linux, o ufw não bloqueia portas que o Docker publica.
https://ollama.example.com e coloque a chave no campo Key (enviada como token Bearer). Se a sua versão não tiver campo de chave nas conexões do Ollama, adicione-a como conexão OpenAI API com a URL https://ollama.example.com/v1 e a chave.https://ollama.example.com e a API Key como a sua chave. O n8n a envia como Authorization: Bearer.https://ollama.example.com/v1 e a chave de API como a sua chave.
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: na data desta verificação, não há uma forma documentada de fazê-lo enviar a sua própria chave para um host personalizado. Rode-o no próprio servidor, ou use o curl ou as bibliotecas acima.basic_auth no checklist funciona para navegadores e para curl -u, mas clientes no estilo OpenAI, o n8n e o Open WebUI enviam Authorization: Bearer, e a autenticação básica os rejeita. Para clientes de API, use a verificação de chave desta página.OLLAMA_ORIGINS restrito (verificação no navegador (em inglês)).MV2 da Munim, Inc. faz uma verificação de IA local por US$ 49 para uma máquina, ou uma verificação para pequenos escritórios por US$ 199 para até 5 máquinas ou um servidor compartilhado de Ollama ou Open WebUI. Você recebe um relatório escrito do que está exposto, arriscado ou lento e do que corrigir primeiro, com os comandos exatos para o seu sistema operacional. O relatório é em inglês. Veja um relatório de exemplo (em inglês). Pague US$ 49 ou pague US$ 199 no Stripe e depois envie para munimversion2@gmail.com a saída de python3 local_ai_checkup.py --json do script gratuito local-ai-checkup, o seu sistema operacional e para que você o usa. MV2 nunca pede senhas, chaves ou acesso remoto, então não envie a sua chave de API.