Munim, Inc. の MV2 による。2026 年 10 月 12 日に Ollama の認証ドキュメント、Ollama FAQ、n8n の Ollama 認証情報のドキュメント、Open WebUI の API ドキュメント、Caddy のマッチャーのドキュメントと照合済み。ご自身のマシンにのみ使ってください。このページは英語の原文から AI で翻訳したものです。内容に食い違いがある場合は原文が優先します。
OLLAMA_API_KEY は ollama.com 用です。Ollama のクラウドのためのもので、ollama.com の設定で作成し、https://ollama.com/api に送ります。ご自身のサーバーを守るものではありません。http://localhost:11434 does not require authentication.」(ローカル API は認証を必要としない)とあります。認証をオンにする設定はありません。ポート 11434 に届く人なら誰でも、あなたの GPU でプロンプトを実行し、モデルのダウンロード・作成・削除ができます。127.0.0.1 のままにし、Authorization: Bearer <key> ヘッダーを確認するリバースプロキシを唯一の入り口にします。OpenAI 形式のクライアント、n8n、Open WebUI は、「API key」欄に入力したときにこのヘッダーを送ります。Ollama を動かしているマシンの中だけで使うなら、どれも必要ありません。127.0.0.1 のままにしておき、締めるためのチェックリストで確認してください。
Open WebUI は /ollama/ 以下のリクエストを Ollama に中継し、その際に自身の API キーを確認します。Ollama は内部のままで、追加のソフトウェアも要りません。
sk- で始まります)。項目が見当たらない場合は、まず管理者が API キーを許可する必要があります。Open WebUI の API キーのドキュメントを参照してください。curl https://webui.example.home/ollama/api/tags -H "Authorization: Bearer sk-..."または Open WebUI の OpenAI 互換エンドポイント
/api/chat/completions を使います。https://webui.example.home/ollama に、API Key を sk- のキーにします。n8n のドキュメントも、この構成の例として Open WebUI を挙げています。キーにはその Open WebUI ユーザーの権限が付くので、アプリごとに別のユーザーを作り、Open WebUI を最新に保ってください(Open WebUI のアドバイザリー(英語)を参照)。
Ollama は 127.0.0.1:11434(既定値)で待ち受けている必要があります。以前に OLLAMA_HOST=0.0.0.0 を設定していたら、チェックリストのステップ 2 のとおりに元に戻してください。そうしないと、ポート 11434 に直接アクセスしてプロキシを素通りされてしまいます。次に、長いランダムなキーを生成します:
openssl rand -hex 32 # or python3 -c "import secrets; print(secrets.token_urlsafe(32))"
(どちらか一方のコマンドで十分です。)
ollama.example.com がこのマシンを指す実在のドメインなら、Caddy は HTTPS 証明書を自動で取得します。ドメインと PASTE_YOUR_KEY_HERE(ご自身のキー)を置き換えてください:
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 マッチャーは完全一致なので、通るのは Bearer、半角スペース 1 つ、そして正確なキーの組み合わせだけです。人やアプリごとに別のキーを渡すには、@key { ... } ブロックに header Authorization "Bearer ..." の行を追加します。Caddy は同じヘッダーの値を OR で扱います。header_up Host localhost:11434 は Ollama FAQ のプロキシ例に従ったものです。Ollama はほかの Host 値のリクエストを拒否することがあります。header_up -Authorization は、キーが Ollama に渡されないようにします。reverse_proxy ブロックの中に flush_interval -1 を追加します。sudo chown root:caddy /etc/caddy/Caddyfile && sudo chmod 640 /etc/caddy/Caddyfile && sudo systemctl reload caddyLAN 内だけの名前(ollama.home など)の場合: 公開の証明書がないので、サイトブロックの中で tls internal を使い、クライアントに Caddy のルート証明書をインストールします。あるいはプロキシを使わず、Tailscale や WireGuard のようなプライベートネットワークを使います(Ollama をリモートで使うを参照)。信頼できないネットワークで、暗号化されていない http:// でキーを送らないでください。そのネットワークの誰でも読めてしまいます。
次の内容を /etc/nginx/conf.d/ollama.conf に置きます。conf.d のファイルは http ブロックの中で読み込まれ、map はそこに置くものです。証明書のパスはご自身のもの(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)
}
}
(コメントの意味は順に: キーを Ollama に渡さない。トークンを届いた順にストリーミングする。長い生成を許す。ollama create によるモデルのアップロードを許す。)キーを追加するたびに map に 1 行足します。その後 sudo nginx -t && sudo systemctl reload nginx を実行し、ファイルを root だけが読めるようにします(sudo chmod 600 /etc/nginx/conf.d/ollama.conf。nginx は起動時に root として読み込みます)。
ollama サービスには ports: を一切付けず、Caddy だけを公開します。上の Caddyfile では reverse_proxy ollama:11434 を使います。ollama サービスには、いつもの GPU 設定を追加してください。
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: {}
(コメントの意味: ports: は書かない。このネットワーク上のコンテナだけが 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
(期待される結果: キーなしは 401、キーありはバージョンが返る、そして「別の」マシンから Ollama に直接つなぐと接続に失敗する。YOUR_KEY はご自身のキー、<server LAN IP> はサーバーの LAN 内 IP です。)最後のコマンドがバージョンを返したら、プロキシを迂回できてしまう状態です。OLLAMA_HOST と Docker の ports: をもう一度確認してください。Linux では、Docker が公開したポートを ufw はブロックしません。
https://ollama.example.com にして、キーを Key 欄に入れます(Bearer トークンとして送られます)。お使いのバージョンの Ollama 接続にキー欄がない場合は、代わりに URL https://ollama.example.com/v1 とキーで OpenAI API の接続として追加してください。https://ollama.example.com、API Key をご自身のキーにします。n8n はこれを Authorization: Bearer として送ります。https://ollama.example.com/v1、API キーをご自身のキーにします。
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 コマンド: この確認時点では、独自のホストに自分のキーを送らせる方法は文書化されていません。サーバー上で直接実行するか、curl や上記のライブラリを使ってください。basic_auth の例はブラウザや curl -u では使えますが、OpenAI 形式のクライアント、n8n、Open WebUI は Authorization: Bearer を送るため、Basic 認証では拒否されます。API クライアントには、このページのキー確認を使ってください。OLLAMA_ORIGINS は狭く保ってください(ブラウザチェック(英語))。Munim, Inc. の MV2 は、マシン 1 台のローカル AI ヘルスチェック(49 米ドル)と、最大 5 台または共有の Ollama・Open WebUI サーバー 1 台を対象にした小規模オフィス向けチェック(199 米ドル)を提供しています。何が公開されていて、何が危険または遅いのか、何から直すべきかをまとめた報告書を、お使いの OS 向けの正確なコマンドとともにお届けします。報告書は英語です。報告書のサンプル(英語)をご覧ください。Stripe で 49 ドルを支払うか 199 ドルを支払うと、その後 munimversion2@gmail.com へ、無料のスクリプト local-ai-checkup の python3 local_ai_checkup.py --json の出力、お使いの OS、用途をメールで送ってください。MV2 がパスワード、キー、リモートアクセスを求めることはありません。API キーは送らないでください。