toolkitbox

~/ / AI記事 / ローカルLLM × VPS / Ollamaの前にnginxを置く: ベーシック認証、HTTPS、ストリーミングの設定

Ollamaの前にnginxを置く: ベーシック認証、HTTPS、ストリーミングの設定

Ollamaは既定ではサーバー自身の上で待ち受けます。これがいちばん安全な置き場所です。別のマシンから使う必要があるときは、OllamaのFAQがnginxなどのプロキシサーバーを案内しています。この記事ではnginxのドキュメントをもとに、パスワード、HTTPS、ストリーミング応答で重要になる設定、そしてほかの入口を閉じるファイアウォールまでを組み立てます。

この記事の末尾に、アフィリエイト広告(PR)のリンクがあります。

公開: · 約8分で読めます · 2026-10-26に、Ollama公式ドキュメントとnginx公式ドキュメントで確認しました。ディレクティブの既定値はnginxのバージョンによって異なるため、お使いのバージョンを確認してください。

OllamaのFAQの内容

OllamaのFAQによると、OllamaはHTTPサーバーとして動作し、Nginxのようなプロキシサーバーを使って公開できます。FAQの例ではポート80で待ち受け、server_nameを設定し、proxy_pass http://localhost:11434 でリクエストを転送し、Hostヘッダーをlocalhost:11434にします。

確認したFAQのページには、Ollamaサーバーの認証に関する説明がありません。そのため、パスワードは手前のプロキシで用意する必要があります。Ollamaは既定で127.0.0.1のポート11434にバインドするので、同じサーバー上のnginxからは、このアドレスを変えずに接続できます。

ベーシック認証でパスワードをかける

ngx_http_auth_basic_moduleは、ユーザー名とパスワードを確認してアクセスを制限します。働くディレクティブは2つです。auth_basicは、その文字列をrealmとして使い、既定ではoffです。auth_basic_user_fileはパスワードファイルを指定します。

Directive既定値ドキュメントの説明
auth_basic string | off;offパラメータは認証のrealmとして使われます。値offにすると、上位のレベルから引き継いだ設定を取り消します。
auth_basic_user_file file;なしファイルには1行につきname:passwordの形で1件を書き、#で始まる行はコメントです。
  • 使えるパスワードの種類: crypt()で暗号化したパスワードとapr1ハッシュ。どちらもApacheのhtpasswdユーティリティか、openssl passwdで作れます。
  • {SCHEME}data 形式にも対応しています。ページによると、PLAINは例示のためだけのもので使うべきではありません。ソルトなしのSHA-1であるSHAも、レインボーテーブル攻撃に弱いため使うべきではありません。SSHAはソルト付きのSHA-1です。
  • ドキュメントの例: location / { auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }

ページにはhtpasswdとopenssl passwdの名前は出ていますが、コマンドは載っていません。よく使われる形として、これは当サイトの案でありページの内容ではありませんが、htpasswd -c /etc/nginx/ollama.htpasswd alice はパスワードを尋ねられ、openssl passwd -apr1 はハッシュを出力するので、それをユーザー名とコロンの後ろに貼り付けます。

HTTPSで通信を暗号化する

当サイトの読み方であり、ドキュメントの記述ではありません: ベーシック認証はリクエストのたびにパスワードを送るので、HTTPSの内側でだけ使ってください。nginxのドキュメントによると、サーバーには待ち受けソケットのsslパラメータと、証明書および秘密鍵の場所が必要です。

Directiveドキュメントの例
listenlisten 443 ssl;
server_nameserver_name www.example.com;
ssl_certificatessl_certificate www.example.com.crt;
ssl_certificate_keyssl_certificate_key www.example.com.key;
  • nginxは既定でssl_protocols TLSv1.2 TLSv1.3とssl_ciphers HIGH:!aNULL:!MD5を使うので、通常は明示的に設定する必要はありません。
  • 秘密鍵はアクセスを制限したファイルに保存すべきですが、nginxのマスタープロセスが読み取れる必要があります。
  • 広く知られた認証局の証明書なのにブラウザーがエラーを出す場合は、サーバーが中間証明書も送る必要があるかもしれません。結合したファイルでは、サーバー証明書をチェーンの証明書より前に置かないと、nginxはkey values mismatchエラーで起動に失敗します。
  • Let's Encryptの入門ページによると、プロバイダーが証明書を取得してくれず、サーバーを管理できる場合は、ACMEクライアントを実行でき、ほとんどの人にはCertbotを勧めています。

ストリーミング応答と遅い応答の設定

モデルは答えを少しずつ書き出し、最初の一片が届くまでに時間がかかることもあります。たとえば大きなモデルをメモリに読み込んでいる間です。外から見たときの挙動は、3つのnginx設定で決まります。

Directive既定値ドキュメントの説明
proxy_bufferingonバッファリングを無効にすると、レスポンスは受信したそばから、クライアントへ同期的に渡されます。有効にすると、nginxはまずレスポンスをバッファに保存します。
proxy_read_timeout60sタイムアウトは、連続する2回の読み取り操作の間にだけ設定され、レスポンス全体には設定されません。プロキシ先のサーバーがこの時間内に何も送信しないと、接続は閉じられます。
proxy_http_versionnginx 1.29.7 以降は 1.11.29.7より前の既定値は1.0でした。keepalive接続には、バージョン1.1または2が推奨されています。

当サイトの読み方であり、ドキュメントの記述ではありません: 答えが書かれるそばから表示されるようにするには、Ollamaのlocationでproxy_bufferingをoffにします。モデルの読み込み中に1分を超えて無言になりうるなら、proxy_read_timeoutを引き上げます。proxy_http_version 1.1を明示的に設定しても、どのバージョンでも害はありません。

まとめて設定する

この設定は、上のディレクティブを1つのサーバー名向けにまとめたものです。ドキュメントにあるディレクティブから当サイトが組み立てたものなので、リロードする前にnginx -tでテストしてください。

Line理由
server {Ollama用の名前に対するserverブロック1つ
listen 443 ssl;HTTPS
server_name ollama.example.com;ご自身の名前に置き換える
ssl_certificate /etc/ssl/ollama.crt;証明書。中間証明書をその後ろに続ける
ssl_certificate_key /etc/ssl/ollama.key;秘密鍵。必要な範囲だけが読めるようにする
auth_basic "ollama";パスワードを有効にする
auth_basic_user_file /etc/nginx/ollama.htpasswd;ユーザーを保管する場所
location / {すべてをOllamaへ渡す
proxy_pass http://localhost:11434;OllamaのFAQより
proxy_set_header Host localhost:11434;OllamaのFAQより
proxy_http_version 1.1;keepaliveに推奨
proxy_buffering off;答えをストリーミングさせるため
proxy_read_timeout 300s;最初の一片が遅くても待てる
}locationの終わり
}serverの終わり

ほかの入口を閉じる

プロキシが役に立つのは、Ollamaやその背後のアプリケーションに、ほかの経路から届かない場合だけです。Ollamaは既定のアドレスのままにして、ファイアウォールでは使うアドレスだけを通します。

作業Ubuntuドキュメントのコマンド
ファイアウォールを有効にするsudo ufw enable
ポートを許可するsudo ufw allow 22
1つのアドレスから1つのポートだけ許可するsudo ufw allow proto tcp from 192.168.0.2 to any port 22
サブネット全体を許可するアドレスを192.168.0.0/24に置き換える
状態を確認するsudo ufw status

Ubuntuのページによると、UFWは最初は無効です。SSHで自分が締め出されることへの警告は書かれていません。当サイトの推奨: 遠隔から接続するサーバーでは、ファイアウォールを有効にする前にSSHのポートを許可し、ポート443は必要なアドレスにだけ許可してください。

VPSを選ぶときは:AIで使う目で6社を見る(PR)

プランは、まずメモリ、次にモデルを置くディスク、そのあとCPUの順に見ます。ここでは、国内の6つのVPSを、AIを動かす目で見て、公式ページに書かれていることと、当サイトの見立てを並べました。

同じ運営者のサイト sabakore.com の「AI・LLM向けVPS診断」では、動かしたいモデルと月額の上限から、メモリに載るプランを料金の安い順に並べられます(GPUは使わず、CPUだけで動かす前提の診断です)。

sabakore.com のAI・LLM向けVPS診断を開く

評価のものさし

  • メモリ: いちばん大きいプランのメモリ。12GB以上なら○(Qwen3 14B が4,096トークンで約10.3 GiB。記事「VPSでローカルLLMを動かすのに必要なメモリ」の表)、8GB以上なら△(Qwen3 8B が約6.4 GiB)。
  • AIツールの入れやすさ: 公式ページに AI 用のテンプレートやスクリプトの記載があれば○、Docker の構築環境だけなら△、記載がなければ×(使えない、という意味ではありません)。
  • 料金と速さは評価しません。料金は変わり、CPUだけで動かしたときの速さは公式に数字がないためです。

公式ページで確認した日:

以下の6社の紹介は、アフィリエイト広告(PR)です。リンク先で申し込みがあると、当サイトの運営者に報酬が支払われます。並びは名前順で、報酬額は並びに関係ありません。評価は、各社の公式ページの記載(確認日は下に表示)だけにもとづく当サイトの見立てで、実際に動かして測ったものではありません。プランの内容や料金は変わるので、申し込む前に公式で確認してください。この記事は、これらのサービスでの動作を保証するものではありません。

  • ConoHa VPS (PR)

    メモリ○AIツールの入れやすさ○

    公式ページに書かれていること

    • 料金表のメモリは512MBから128GBまで(CPUは最大40コア)
    • スタートアップスクリプトで OpenClaw、Claude Code、n8n、Dify などを導入できると書かれている
    • GPUプランは、このページには記載なし(GPU用の案内は別のページ)

    当サイトの見立て

    メモリの選択肢が広く、AIツールを入れる仕組みも公式に用意されているので、「まず Dify や n8n を動かして試す」使い方と、大きめのモデルを載せたい使い方のどちらにも向きます。

    申し込む前に

    最小プランの書き方がページ内で食い違っています(料金表は512MB、FAQは1GB〜)。申し込む前に、いま選べるプランを公式で確認してください。CPUだけで動かしたときの速さは公式に数字がありません。

    ConoHa VPSの公式サイトで申し込む(PR)公式ページ

  • KAGOYA CLOUD VPS (PR)

    メモリ△AIツールの入れやすさ○

    公式ページに書かれていること

    • メモリは1GB・2GB・4GB・8GB(CPUは最大6コア、SSDは100GB〜800GB)
    • 「オープンソースのAI開発基盤DifyをVPSで手軽に導入」できると書かれ、Docker の構築済みサーバーもある
    • 日額・月額(月額上限あり)と年額の定額プランがある

    当サイトの見立て

    Dify を動かす用途が公式に想定されています。日額の料金から使えるので、「まず試して合わなければやめる」進め方がしやすい一方、メモリは8GBまでなので、載せられるモデルは8B級までが目安です。

    申し込む前に

    8GBでの Qwen3 8B は、4,096トークンの見積もりで約6.4 GiBです。コンテキストを長くする、同時に使う人を増やすと足りなくなります。GPUプランはこのページに記載がありません。

    KAGOYA CLOUD VPSの公式サイトで申し込む(PR)公式ページ

  • XServer VPS (PR)

    メモリ○AIツールの入れやすさ○

    公式ページに書かれていること

    • 料金表に載っているのは2GB・4GB・8GBの3プラン(NVMe SSD、8GBは6コア・400GB)。FAQには高負荷の用途向けに最大64GBのプランがあると書かれている
    • アプリイメージに Dify があり、FAQは用途の例として「AIツールのホスティング」を挙げている
    • GPUは、別サービスの「GPUサーバー」へのリンクがあるだけで、VPSのページには記載なし

    当サイトの見立て

    Dify のアプリイメージと「AIツールのホスティング」という用途が公式に書かれています。小さく始めて、必要になったら大きいプランへ、という使い方ができそうです。

    申し込む前に

    64GBのプランの内容や料金は、このページには載っていません。大きいモデルを載せたいときは、申し込む前に、そのプランが今も選べるかを公式で確認してください。

    XServer VPSの公式サイトで申し込む(PR)公式ページ

  • お名前.com VPS (PR)

    メモリ○AIツールの入れやすさ×

    公式ページに書かれていること

    • メモリは1GBから16GBまで(CPUは最大10コア、SSDは100GB〜1TB)
    • KVM の仮想化で、Linux 環境を使える
    • AI や Docker のテンプレートは、このページには記載なし

    当サイトの見立て

    16GB・10コア・1TBまで選べるので、自分でモデルを入れて動かす前提なら、メモリとディスクには余裕があります。AIツールの導入は自分で組み立てることになります。

    申し込む前に

    AI向けのテンプレートや手順は公式にありません。このサイトの「VPSにOllamaを入れて動かし続ける」の手順で自分で入れることになります。

    お名前.com VPSの公式サイトで申し込む(PR)公式ページ

  • クラウドVPS byGMO (PR)

    メモリ○AIツールの入れやすさ×

    公式ページに書かれていること

    • Vシリーズは1GB・2GB・4GB・6GB・8GB・12GB(CPUは最大7コア、ディスクは50GB〜800GB)
    • プランの月額料金とは別に、サーチャージ費が課金される
    • AI や Docker のテンプレートは、このページには記載なし

    当サイトの見立て

    12GBまで選べるので、8B級のモデルを長めのコンテキストで使いたいときの選択肢になります。AIツールは自分で入れる前提です。

    申し込む前に

    月額に加えてサーチャージ費がかかるので、実際の支払いは料金表より増えます。申し込む前に、合計の目安を公式で確認してください。

    クラウドVPS byGMOの公式サイトで申し込む(PR)公式ページ

  • さくらのVPS (PR)

    メモリ△AIツールの入れやすさ△

    公式ページに書かれていること

    • メモリは512MBから8GBまで(CPUは最大6コア、SSDは25GB〜400GB。オプションで最大800GB)
    • 用途の例に「AI / 機械学習用途」があり、推奨はメモリ16GB〜・SSD 100GB〜と書かれている(掲載プランの最大は8GB)
    • スタートアップスクリプトに Docker の構築環境がある。AI専用のテンプレートは記載なし。石狩・大阪・東京から選べる

    当サイトの見立て

    公式がAI用途の推奨に挙げる16GBには、掲載プランの最大(8GB)が届きません。4B級までの小さなモデルや、Dify だけを動かす使い方なら選べます。

    申し込む前に

    8GBまでのプランで、AI用途の公式の推奨(16GB〜)を満たすものは、このページにはありません。GPUプランも記載がありません。

    さくらのVPSの公式サイトで申し込む(PR)公式ページ

出典

次に読む