私は昨年、ある B2B SaaS のバックエンドを Nginx 経由で各種 LLM プロバイダーへ接続する構成に置き換えた経験があります。そのプロダクトは日次 200 万リクエストを処理する規模で、当初は各アプリケーションサーバーから直接 API エンドポイントへリクエストを送るシンプルな構成でした。ある金曜日、突然 ConnectionError: HTTPSConnectionPool(host='api.anthropic.com', port=443): Read timed out. が本番環境で多発し、SLA 違反寸前まで追い込まれたのです。原因は明白で、特定プロバイダーへの経路が輻輳し、TLS ハンドシェイクのたびに証明書検証で 20〜40 ミリ秒のコストが乗っていました。これが、私が Nginx リバースプロキシを前面に立てる決断をした瞬間です。本記事では、Claude 互換エンドポイントを今すぐ登録してすぐ使える HolySheep AI を例に、本番品質の Nginx 構成を https://api.holysheep.ai/v1 ベースで構築する手順を解説します。同社は公式レート ¥7.3=$1 のところ ¥1=$1 で提供しており、実質 85% のコスト削減、加えて平均レイテンシは 50ms 未満、WeChat Pay・Alipay 対応、登録時の無料クレジット付与と、本番運用に嬉しい特典が揃っています。
なぜ Nginx リバースプロキシが必要か
- 接続プールと Keep-Alive で TLS ハンドシェイクのオーバーヘッドを削減
- プロバイダー側のレート制限超過時に、リトライ/サーキットブレーカで救済
- 複数バックエンド(HolySheep/他プロバイダ/フォールバック)へのロードバランシング
- 本番メトリクス(アクセスログ/エラーレート/レイテンシ)を一元取得
- API キーを内部ネットワークに閉じ込め、外部公開を防ぐ
基本の Nginx 構成
/etc/nginx/conf.d/claude-proxy.conf
upstream holysheep_backend {
server api.holysheep.ai:443 max_fails=3 fail_timeout=30s;
keepalive 64;
}
server {
listen 8443 ssl http2;
server_name llm.internal.example.com;
ssl_certificate /etc/letsencrypt/live/llm.internal.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/llm.internal.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
access_log /var/log/nginx/claude-access.log json;
error_log /var/log/nginx/claude-error.log warn;
location /v1/ {
proxy_pass https://holysheep_backend/v1/;
proxy_http_version 1.1;
# Keep-Alive を効かせるための必須設定
proxy_set_header Connection "";
proxy_set_header Host api.holysheep.ai;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# アプリケーションから渡された Authorization を上流へ転送
proxy_set_header Authorization $http_authorization;
# HolySheep 側の上流証明書チェーンを明示的に信頼
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
proxy_ssl_verify on;
proxy_ssl_name api.holysheep.ai;
proxy_connect_timeout 5s;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
proxy_buffering off;
proxy_request_buffering off;
}
location /healthz {
access_log off;
return 200 "ok\n";
}
}
設定を反映したら、いつも通り構文チェックとリロードを行います。
sudo nginx -t && sudo systemctl reload nginx
curl -fsS https://llm.internal.example.com/healthz
サーバ側での API キー注入パターン(より安全)
私は前段の Nginx に API キーを保持させ、アプリケーションには Authorization ヘッダを送らせない設計を好みます。こうすると漏洩面が Nginx ホストの一箇所に限定され、資格情報のローテーションも一元化できます。下記のスニ