Stack

HAProxy、APISIX 與 LiteLLM:分層 API / LLM Gateway

Home Gateway 以 HAProxy 承接公開流量,api.yihua.app 交由 APISIX 治理,再把 LLM API 轉給 LiteLLM 與 LM Studio、OpenRouter。

特定情境推薦 NetworkingAPI GatewayAIHome Lab
包含工具
haproxy、 apisix、 litellm
最後審閱
2026/7/15

我的實際用途

這三套軟體都有 proxy、routing 或 traffic policy 能力,但在我的 Home Gateway 架構裡不是三選一,也不是把所有請求依序通過三個功能相同的 gateway。

我的分層方式是:

Internet / API Client
          │
          ▼
Home Gateway
HAProxy:公開入口、TLS、hostname 分流
          │
          │ api.yihua.app
          ▼
APISIX:API route、consumer auth、rate limit、observability
          │
          ├── 一般 API ─────────────► Application services
          │
          └── LLM API
                   │
                   ▼
              LiteLLM:model alias、provider routing、usage / cost
                   │
                   ├──► LM Studio:本機模型
                   └──► OpenRouter / 其他 AI model API

HAProxy 擋在最外面,api.yihua.app 才轉給 APISIX;APISIX 判斷 route 是否屬於 LLM API,只有這部分再交給 LiteLLM。一般 application API 不需要多經過 LiteLLM。

三者比較

面向HAProxyApache APISIXLiteLLM
核心定位Reverse proxy / load balancer通用 API GatewayLLM Gateway / provider abstraction
在架構中的位置Home Gateway 最外層api.yihua.app API policy layerLLM API 專用內層
主要理解的對象連線、TLS、Host、path、backendRoute、consumer、plugin、upstreamModel、provider、token、cost
TLS termination主要負責可支援,但此架構不是公網第一層不作為主要 edge TLS 層
一般 API auth可做基礎限制,但不是主要選擇主要負責僅處理 LLM 內層需要的 key / team context
HTTP rate limit適合 edge 粗粒度保護適合 consumer / route quota適合 LLM project / model policy
Token / cost不理解可透過 AI plugin 處理核心使用情境
Provider 轉換不負責AI plugin 可處理核心使用情境
LM Studio只能當一般 HTTP upstream可當 AI upstream當作 OpenAI-compatible model backend
OpenRouter只能當一般 HTTP upstream可由 AI plugin 串接原生支援的 provider 路線
適合取代誰可涵蓋很小型環境的部分 APISIX 工作簡單需求下可涵蓋 HAProxy 或 LiteLLM 部分工作不取代 Home Gateway 或通用 API Gateway

為什麼要分三層

HAProxy:讓 Home Gateway 保持穩定

Home Gateway 需要面對所有公開服務,不應為了某個 model provider 或 API consumer 的變動頻繁改動。HAProxy 只要穩定處理 TLS、hostname 與內部 upstream,api.yihua.app 的 lifecycle 就可以交給 APISIX。

APISIX:讓公開 API 有一致治理

不論後端是一般 application service 還是 LiteLLM,外部 client 都先經過相同的 authentication、route、rate limit、logging 與 tracing。這讓 LLM API 不會成為繞過公共 API policy 的特殊入口。

LiteLLM:隔離快速變動的模型供應商

LM Studio 與 OpenRouter 的 endpoint、credential、model name、能力與 fallback 條件都可能不同。LiteLLM 把這些差異封裝在內層,client 與 APISIX 只需要認得穩定的 model alias 和 LLM route。

重疊功能怎麼處理

這個架構最容易出問題的地方,不是少一個功能,而是同一個功能在三層各做一次。

我會採用以下原則:

  1. HAProxy 只做 edge connection protection 與粗粒度分流。
  2. APISIX 是公開 API authentication 與 request quota 的 source of truth。
  3. LiteLLM 是 model routing、provider credential、token usage 與 cost policy 的 source of truth。
  4. APISIX 若加 token limit,只作為公開平台的硬上限;LiteLLM 再處理 model 或 project 細項。
  5. 每一層都產生或傳遞同一個 request ID,才能跨 HAProxy、APISIX、LiteLLM 與 backend 追查問題。

何時可以少一層

分層不是越多越好。如果需求改變,可以縮減:

  • 只有少量固定 API、沒有 consumer 或 plugin 治理時:HAProxy 可直接送 backend,不一定需要 APISIX。
  • 只有 LLM API,而且 APISIX AI plugin 已涵蓋所有 provider 與成本需求時:可評估由 APISIX 直接連 LM Studio / OpenRouter。
  • LiteLLM 已是唯一公開服務,且 Home Gateway 不需承接其他網域時:可重新評估 APISIX,但仍需保留可靠的 edge TLS 與存取控制。

以目前用途而言,三層的價值是責任清楚,而不是單純增加 proxy 數量。

驗證清單

建置完成後不能只確認每個 process 有啟動,至少要驗證:

  • 從外部透過 https://api.yihua.app 完成 TLS 與 DNS 路徑
  • HAProxy 傳遞正確的 Host、client IP 與 request ID
  • APISIX authentication、route 與 rate limit 實際生效
  • 一般 API 不會誤送 LiteLLM
  • LLM chat completion 與 streaming 能從 APISIX 穿過 LiteLLM 到 LM Studio
  • LM Studio 不可用時,符合條件的請求能正確 fallback 到 OpenRouter
  • tool calling、structured output、embeddings 與 Responses API 依實際 client 逐項測試
  • APISIX 與 LiteLLM 的 log 可以用同一個 request ID 對照

只有完成一個真正的 model response round-trip,才能說這條 LLM Gateway 路徑已經可用。