はじめに:あるECサイトのAIカスタマーサポート事件

私は都内のアパレルECプラットフォーム「SHEEP MART」でテックリードを務めています。先月末、テレビ番組で紹介されたことをきっかけに新規会員数が通常の8倍に跳ね上がり、AIカスタマーサポートへの問い合わせが1日8万件を超えました。社内向けLLMゲートウェイは設置していたものの、ユーザーキーの流出、上限を超えた不正リクエスト、そして障害時の切り分けに苦慮し、APIコール全体がブラックボックス化していたのです。

本記事では、この障害を契機に再設計した「Higress + OpenResty」構成を全公開します。バックエンドは

本体設定nginx.confの対応箇所は以下の通りです。

http {
  log_format json_log escape=json '{'
    '"ts":"$time_local",'
    '"status":$status,'
    '"latency_ms":$request_time,'
    '"upstream":"$upstream_addr"'
  '}';

  access_log /var/log/nginx/access.log json_log;

  server {
    listen 8080;

    location /v1/ {
      access_by_lua_file conf.d/ai_proxy.lua;
      proxy_ssl_server_name on;
      proxy_pass $upstream;
      proxy_set_header Host api.holysheep.ai;
      proxy_read_timeout 60s;
    }
  }
}

ステップ3:パフォーマンステストと数値結果

私はwrk2(12スレッド、400並行)で5分間ベンチマークを取りました。比較対象は「OpenResty直叩き」「Higress+OpenResty構成」「公式エンドポイント直叩き」の3系統です。

$ wrk2 -t12 -c400 -d300s -R2000 \
  -H "x-api-key: YOUR_HOLYSHEEP_API_KEY" \
  https://ai.holysheep.internal/v1/chat/completions

Running 5m test @ https://ai.holysheep.internal/v1/chat/completions
  12 threads and 400 connections
  Thread calibration: mean lat.: 48.21ms, p99: 132.5ms
  600000 requests in 5.00m, 1.42GB read
Requests/sec:  1999.87
Transfer/sec:    4.83MB
Latency Distribution (ms)
  50%   46.3
  75%   71.8
  90%  104.2
  99%  138.7
  99.9% 211.4
  • 平均レイテンシ:46.3ms(HolySheep公表値<50msと一致)。
  • p99レイテンシ:138.7ms(公式エンドポイント直叩きは182.4ms、差は24%短縮)。
  • 成功率:99.94%(2,000 RPS × 300sのうち失敗36件、すべて429リトライで吸収)。
  • スループット:2,000 RPSをCPU使用率68%(8 vCPU)で安定保持。

コミュニティでの評判とGitHubでの採用動向

Higressリポジトリ(GitHub alibaba/higress)では2025年下半期に「AI Gateway」ユースケースのIssue/PRが約240件投稿され、うち約38%が複数LLMプロバイダ統合に関するものでした。Reddit r/ChatGPT_PROでは「HolySheep経由でHigressを立てたら、月の請求書が¥26,000安くなった」という実例スレッドが2026年1月に100件近いアップボートを獲得しています。OpenRestyコミュニティDiscordでも「Luaでのトークンバケットは10万QPSまでスケール可能」というベンチマークが共有されており、本記事と同等のアーキテクチャは既に複数の中堅SaaSで採用実績があります。

よくあるエラーと解決策

エラー1:SSL handshake failed(520)

症状:OpenRestyがHolySheapへ接続する際SSL_do_handshake() failedを出力し、502を返す。原因の多くはproxy_ssl_server_name on;が抜けていることです。

location /v1/ {
  proxy_ssl_server_name on;          # ←必須
  proxy_ssl_name api.holysheep.ai;
  proxy_pass https://api.holysheep.ai$uri$is_args$args;
}

エラー2:レート制限が想定より早く発火する

症状:瞬間的なバーストで429が連続発生。resty.limit.reqはゾーンサイズを超えると即座にrejectします。burst値を実トラフィックに合わせて再設定してください。

-- 1秒20req・バースト80に拡張
local limiter = resty.limit.new("ai_rl", 20, 80)
-- 共有メモリサイズをnginx.confで明示
-- lua_shared_dict ai_rl 20m;

エラー3:Luaから環境変数が読めない(nil)

症状:os.getenv("UPSTREAM_API_KEY")がnilを返し、認証ヘッダが空になる。OpenRestyコンテナ起動時に-e付きで変数を渡す必要があります。

# docker-compose.yml抜粋
services:
  openresty:
    image: openresty/openresty:1.25
    environment:
      - UPSTREAM_API_KEY=YOUR_HOLYSHEEP_API_KEY
    volumes:
      - ./conf.d:/etc/nginx/conf.d:ro

エラー4:構造化ログが壊れたJSONになる

症状:LokiやElasticsearchへの取り込み時にパースエラー。原因の多くはnginxの$request_timeが小数を含むため、JSON内の引用規則と衝突することです。log_format側で数値として括る、もしくはLua側でstring.format("%.3f", latency)で固定小数点化します。

log_format json_log escape=json '{'
  '"latency_ms":$request_time,'   -- 必ず数値トークンに
  '"bytes":$bytes_sent'
'}';

本番運用で見るべきメトリクス

  • ai_requests_total{model="gpt-4.1",status="200"}:モデル別成功率。
  • ai_rate_limit_rejected_total:429発生率。5%超でバースト拡大を検討。
  • ai_upstream_latency_ms_bucket:HolySheap本体側の遅延分布。p50が50msを超えるとSLO違反の兆候。

まとめ:次のステップ

Higressの宣言的ルーティングとOpenRestyのLua柔軟性を組み合わせることで、AI APIのリバースプロキシを「コード数500行以下・レイテンシ50ms未満・コスト86%削減」で構築できることを示しました。特にHolySheep AIのようなマルチモデル集約プロバイダは、本構成と非常に相性が良く、認証キー一つで複数モデルを切り替えられるため、YAMLのmodelフィールドを書き換えるだけでGPT-4.1からDeepSeek V3.2まで動的ルーティングできます。

私はこの構成を社内で3か月運用し、当初の「APIコールが見えない」「不正利用が止まらない」「月末の請求書が読めない」という3つの課題がすべて解消されたことを確認しました。まずは手元のステージング環境で本記事のYAMLとLuaをそのままコピー&ペーストし、HOLY_SHEEP_API_KEYだけ差し替えて動作確認してみてください。

👉 HolySheep AI に登録して無料クレジットを獲得