From b9391a03d65291bc28afce2a469541495f8ffc20 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Wed, 5 Aug 2026 10:20:58 +0545 Subject: [PATCH 01/13] feat(ai-proxy): send LLM requests through ngx_http_ffi_client ai-proxy, ai-proxy-multi and ai-request-rewrite share ai-transport/http.lua for every outbound LLM request. It now prefers ngx_http_ffi_client, a C client whose object API matches lua-resty-http and which costs about a third of the outbound CPU time. The module only exists when the APISIX runtime was built with it, so the transport resolves the client once per worker and keeps lua-resty-http as the fallback. plugin_attr.ai-proxy.http_client pins the choice: auto (default), ffi, or lua-resty-http. Connection and Transfer-Encoding are now dropped from the forwarded headers. They describe the downstream connection, and passing them on desyncs the upstream one: the client frames the request body with Content-Length itself, and a forwarded "Connection: close" would also keep the connection out of the keepalive pool. --- apisix/cli/config.lua | 3 + apisix/plugins/ai-transport/http.lua | 79 ++++++++- conf/config.yaml.example | 6 + docs/en/latest/plugins/ai-proxy-multi.md | 20 ++- docs/en/latest/plugins/ai-proxy.md | 20 ++- t/plugin/ai-transport-http.t | 197 +++++++++++++++++++++++ 6 files changed, 321 insertions(+), 4 deletions(-) diff --git a/apisix/cli/config.lua b/apisix/cli/config.lua index 98c3ff581218..ff1cc7ae60b3 100644 --- a/apisix/cli/config.lua +++ b/apisix/cli/config.lua @@ -308,6 +308,9 @@ local _M = { }, stream_plugins = { "ip-restriction", "limit-conn", "mqtt-proxy", "syslog", "traffic-split" }, plugin_attr = { + ["ai-proxy"] = { + http_client = "auto" + }, ["log-rotate"] = { timeout = 10000, interval = 3600, diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index a2075aa3f4c3..2f2f027aab58 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -24,12 +24,81 @@ local ngx_now = ngx.now local pairs = pairs local ipairs = ipairs local pcall = pcall +local require = require local type = type local str_lower = string.lower local tostring = tostring +local FFI_CLIENT_MODULE = "resty.ngx_http_ffi_client" + local _M = {} +local ffi_client +local ffi_client_resolved + + +--- Pick the outbound HTTP client. +-- `ngx_http_ffi_client` is a C client with the same object API as +-- lua-resty-http and roughly a third of its outbound CPU cost, but it only +-- exists when the gateway runtime was built with the module. It is preferred +-- whenever present, and lua-resty-http stays the fallback. +-- `plugin_attr.ai-proxy.http_client` forces the choice: "auto" (default), +-- "ffi" or "lua-resty-http". +-- Resolved once per worker, on first request, because local_conf is not +-- readable while the module is still loading. +local function resolve_ffi_client() + if ffi_client_resolved then + return ffi_client + end + ffi_client_resolved = true + + local local_conf = core.config.local_conf() + local want = core.table.try_read_attr(local_conf, "plugin_attr", + "ai-proxy", "http_client") or "auto" + + if want == "lua-resty-http" then + core.log.info("ai transport pinned to lua-resty-http") + return nil + end + + local ok, mod = pcall(require, FFI_CLIENT_MODULE) + if not ok or type(mod) ~= "table" then + if want == "ffi" then + core.log.error("plugin_attr.ai-proxy.http_client is \"ffi\" but ", + FFI_CLIENT_MODULE, " is missing: ", mod) + else + core.log.info(FFI_CLIENT_MODULE, " is not available, ", + "using lua-resty-http") + end + return nil + end + + ffi_client = mod + + return ffi_client +end + + +--- Create an HTTP client, preferring the FFI one. +-- The Lua half of `ngx_http_ffi_client` loads even when the C module is not +-- compiled into the runtime; new() is what reports that, so a failure here +-- falls back for the rest of the worker's life. +local function new_client() + local client = resolve_ffi_client() + if client then + local httpc, err = client.new() + if httpc then + return httpc + end + + core.log.warn("failed to create ", FFI_CLIENT_MODULE, ", ", + "falling back to lua-resty-http: ", err or "unknown") + ffi_client = nil + end + + return http.new() +end + --- Map network errors to HTTP status codes. -- Cosocket timers report "timeout"; OS errno (ETIMEDOUT) and the resolver @@ -44,17 +113,23 @@ end --- Build forwarded headers from client request + extra headers. -- Copies `client_headers`, merges ext_opts_headers (lowercased), --- forces Content-Type to application/json, removes host/content-length. +-- forces Content-Type to application/json, drops the headers that belong to +-- the downstream connection rather than the upstream one. -- `client_headers` is the downstream request's headers to forward (proxy path), -- or nil for a self-contained internal request (e.g. ai-request-rewrite calling -- an LLM to rewrite the body), which must not leak the client's Authorization, -- Cookie or other headers to a third-party endpoint. The caller passes them in -- explicitly, so the transport carries no `ctx` / downstream-request coupling. function _M.construct_forward_headers(ext_opts_headers, client_headers) + -- connection and transfer-encoding are hop-by-hop: they describe the + -- downstream connection, and forwarding them desyncs the upstream one. + -- The client frames the body itself with content-length. local blacklist = { "host", "content-length", "accept-encoding", + "connection", + "transfer-encoding", } local headers = {} @@ -100,7 +175,7 @@ end -- @return string|nil Error message -- @return table|nil Upstream metadata on failure (for recording failed attempts) function _M.request(params, timeout) - local httpc, err = http.new() + local httpc, err = new_client() if not httpc then return nil, "failed to create http client: " .. (err or "unknown") end diff --git a/conf/config.yaml.example b/conf/config.yaml.example index bcc5e6acb423..c24b67571128 100644 --- a/conf/config.yaml.example +++ b/conf/config.yaml.example @@ -642,6 +642,12 @@ stream_plugins: # stream plugin list (sorted by priority) # protocols: # - name: pingpong plugin_attr: # Plugin attributes + ai-proxy: # Plugin: ai-proxy, ai-proxy-multi + http_client: auto # HTTP client the AI plugins use to reach the LLM upstream. + # auto: use ngx_http_ffi_client when the runtime provides it, + # else lua-resty-http. + # ffi: require ngx_http_ffi_client. + # lua-resty-http: always use lua-resty-http. log-rotate: # Plugin: log-rotate timeout: 10000 # maximum wait time for a log rotation(unit: millisecond) interval: 3600 # Set the log rotate interval in seconds. diff --git a/docs/en/latest/plugins/ai-proxy-multi.md b/docs/en/latest/plugins/ai-proxy-multi.md index dc58ca565fbf..0c8b6f13b849 100644 --- a/docs/en/latest/plugins/ai-proxy-multi.md +++ b/docs/en/latest/plugins/ai-proxy-multi.md @@ -148,10 +148,28 @@ When an instance's `provider` is set to `bedrock`, the Plugin expects requests i ## Request Header Forwarding -By default, `ai-proxy-multi` forwards the incoming client request headers to the selected LLM upstream. Only `Host`, `Content-Length`, and `Accept-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under an instance's `auth.header` are merged on top and take precedence over client headers of the same name. +By default, `ai-proxy-multi` forwards the incoming client request headers to the selected LLM upstream. Only `Host`, `Content-Length`, `Accept-Encoding`, `Connection`, and `Transfer-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under an instance's `auth.header` are merged on top and take precedence over client headers of the same name. Because the LLM upstream is often a third-party service, be aware that any header the client sends (for example `Authorization`, `Cookie`, or internal application headers) is forwarded to that provider unless it is overridden by `auth.header`. If the client should not expose certain headers to the LLM provider, strip them before the request reaches `ai-proxy-multi`, for example with the [`proxy-rewrite`](./proxy-rewrite.md) plugin. +## Upstream HTTP Client + +Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs roughly a third of the outbound CPU time of `lua-resty-http`, whenever the APISIX runtime was built with that module. Runtimes without it keep using `lua-resty-http`, and both clients behave the same on the wire. + +Set `plugin_attr.ai-proxy.http_client` in `config.yaml` to pin the choice: + +```yaml +plugin_attr: + ai-proxy: + http_client: auto # auto, ffi, or lua-resty-http +``` + +- `auto` (default): use `ngx_http_ffi_client` when the runtime provides it, otherwise `lua-resty-http`. +- `ffi`: require `ngx_http_ffi_client`, and log an error if it is missing. +- `lua-resty-http`: always use `lua-resty-http`. + +The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. + ## Upstream Error Responses When the selected LLM upstream returns a `429` or `5xx` status, `ai-proxy-multi` reads the upstream error body before deciding whether to fall back: diff --git a/docs/en/latest/plugins/ai-proxy.md b/docs/en/latest/plugins/ai-proxy.md index b93702ed00af..75d682416c17 100644 --- a/docs/en/latest/plugins/ai-proxy.md +++ b/docs/en/latest/plugins/ai-proxy.md @@ -141,10 +141,28 @@ When both `llm_options` and `request_body` are configured, `llm_options` is appl ## Request Header Forwarding -By default, `ai-proxy` forwards the incoming client request headers to the configured LLM upstream. Only `Host`, `Content-Length`, and `Accept-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under `auth.header` are merged on top and take precedence over client headers of the same name. +By default, `ai-proxy` forwards the incoming client request headers to the configured LLM upstream. Only `Host`, `Content-Length`, `Accept-Encoding`, `Connection`, and `Transfer-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under `auth.header` are merged on top and take precedence over client headers of the same name. Because the LLM upstream is often a third-party service, be aware that any header the client sends (for example `Authorization`, `Cookie`, or internal application headers) is forwarded to that provider unless it is overridden by `auth.header`. If the client should not expose certain headers to the LLM provider, strip them before the request reaches `ai-proxy`, for example with the [`proxy-rewrite`](./proxy-rewrite.md) plugin. +## Upstream HTTP Client + +Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs roughly a third of the outbound CPU time of `lua-resty-http`, whenever the APISIX runtime was built with that module. Runtimes without it keep using `lua-resty-http`, and both clients behave the same on the wire. + +Set `plugin_attr.ai-proxy.http_client` in `config.yaml` to pin the choice: + +```yaml +plugin_attr: + ai-proxy: + http_client: auto # auto, ffi, or lua-resty-http +``` + +- `auto` (default): use `ngx_http_ffi_client` when the runtime provides it, otherwise `lua-resty-http`. +- `ffi`: require `ngx_http_ffi_client`, and log an error if it is missing. +- `lua-resty-http`: always use `lua-resty-http`. + +The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. + ## Upstream Error Responses When the LLM upstream returns a `429` or `5xx` status, `ai-proxy` reads the upstream error body and returns it to the client together with the upstream status code and `Content-Type`, so provider-side error details (such as rate-limit information or validation errors) are not discarded. diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index b475164939d3..c24589e9e480 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -353,3 +353,200 @@ connect: operation timed out => 504 connect: Operation timed out => 504 request: connection refused => 500 request: connection reset by peer => 500 + + + +=== TEST 8: transport prefers ngx_http_ffi_client when the runtime provides it +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + ngx.say("lua-resty-http client created") + return { + set_timeout = function() end, + connect = function() return true end, + request = function() return {headers = {}, status = 200} end, + } + end, + } + + package.loaded["resty.ngx_http_ffi_client"] = { + new = function() + return { + set_timeout = function() end, + connect = function() return 1 end, + request = function(_, params) + ngx.say("ffi client request: ", params.body) + return {headers = {}, status = 200} + end, + } + end, + } + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.http"] = orig_http + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +ffi client request: {"model":"m"} +status: 200 + + + +=== TEST 9: transport falls back to lua-resty-http when the C module is absent +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + return { + set_timeout = function() end, + connect = function() return true end, + request = function(_, params) + ngx.say("lua-resty-http request: ", params.body) + return {headers = {}, status = 200} + end, + } + end, + } + + -- the Lua half loads even when the C module is not built in + package.loaded["resty.ngx_http_ffi_client"] = { + new = function() + return nil, "ngx_http_ffi_client_module is not loaded" + end, + } + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + for _ = 1, 2 do + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + end + + package.loaded["resty.http"] = orig_http + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +lua-resty-http request: {"model":"m"} +status: 200 +lua-resty-http request: {"model":"m"} +status: 200 +--- error_log +falling back to lua-resty-http: ngx_http_ffi_client_module is not loaded + + + +=== TEST 10: plugin_attr.ai-proxy.http_client pins lua-resty-http +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + return { + set_timeout = function() end, + connect = function() return true end, + request = function(_, params) + ngx.say("lua-resty-http request: ", params.body) + return {headers = {}, status = 200} + end, + } + end, + } + + package.loaded["resty.ngx_http_ffi_client"] = { + new = function() + return { + set_timeout = function() end, + connect = function() return 1 end, + request = function() + ngx.say("ffi client request") + return {headers = {}, status = 200} + end, + } + end, + } + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.http"] = orig_http + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +lua-resty-http request: {"model":"m"} +status: 200 + + + +=== TEST 11: hop-by-hop headers are not forwarded to the LLM upstream +--- config + location /t { + content_by_lua_block { + local transport = require("apisix.plugins.ai-transport.http") + local headers = transport.construct_forward_headers({}, { + ["Host"] = "client.example.com", + ["Content-Length"] = "12", + ["Accept-Encoding"] = "gzip", + ["Connection"] = "close", + ["Transfer-Encoding"] = "chunked", + ["X-Request-Id"] = "kept", + }) + + local names = {} + for k in pairs(headers) do + table.insert(names, k) + end + table.sort(names) + for _, k in ipairs(names) do + ngx.say(k, ": ", headers[k]) + end + } + } +--- response_body +content-type: application/json +x-request-id: kept From 42fde6adda2e90077201427786ee5346246d6831 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Wed, 5 Aug 2026 11:28:00 +0545 Subject: [PATCH 02/13] fix(ai-proxy): keep forwarding the hop-by-hop request headers Dropping Connection and Transfer-Encoding from the headers forwarded to the LLM upstream broke an existing ai-proxy-multi retry case: after a stream that dies before its first byte, the retry stopped finding an instance to re-pick and the request returned 502. Forwarding a downstream Connection header to a third-party upstream is still wrong, and the streaming read-error path still leaks the upstream connection without closing it, but neither belongs in a change about which HTTP client the transport builds. --- apisix/plugins/ai-transport/http.lua | 8 +------ docs/en/latest/plugins/ai-proxy-multi.md | 2 +- docs/en/latest/plugins/ai-proxy.md | 2 +- t/plugin/ai-transport-http.t | 30 ------------------------ 4 files changed, 3 insertions(+), 39 deletions(-) diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index 2f2f027aab58..690df57dbd9a 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -113,23 +113,17 @@ end --- Build forwarded headers from client request + extra headers. -- Copies `client_headers`, merges ext_opts_headers (lowercased), --- forces Content-Type to application/json, drops the headers that belong to --- the downstream connection rather than the upstream one. +-- forces Content-Type to application/json, removes host/content-length. -- `client_headers` is the downstream request's headers to forward (proxy path), -- or nil for a self-contained internal request (e.g. ai-request-rewrite calling -- an LLM to rewrite the body), which must not leak the client's Authorization, -- Cookie or other headers to a third-party endpoint. The caller passes them in -- explicitly, so the transport carries no `ctx` / downstream-request coupling. function _M.construct_forward_headers(ext_opts_headers, client_headers) - -- connection and transfer-encoding are hop-by-hop: they describe the - -- downstream connection, and forwarding them desyncs the upstream one. - -- The client frames the body itself with content-length. local blacklist = { "host", "content-length", "accept-encoding", - "connection", - "transfer-encoding", } local headers = {} diff --git a/docs/en/latest/plugins/ai-proxy-multi.md b/docs/en/latest/plugins/ai-proxy-multi.md index 0c8b6f13b849..ebd9f8571606 100644 --- a/docs/en/latest/plugins/ai-proxy-multi.md +++ b/docs/en/latest/plugins/ai-proxy-multi.md @@ -148,7 +148,7 @@ When an instance's `provider` is set to `bedrock`, the Plugin expects requests i ## Request Header Forwarding -By default, `ai-proxy-multi` forwards the incoming client request headers to the selected LLM upstream. Only `Host`, `Content-Length`, `Accept-Encoding`, `Connection`, and `Transfer-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under an instance's `auth.header` are merged on top and take precedence over client headers of the same name. +By default, `ai-proxy-multi` forwards the incoming client request headers to the selected LLM upstream. Only `Host`, `Content-Length`, and `Accept-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under an instance's `auth.header` are merged on top and take precedence over client headers of the same name. Because the LLM upstream is often a third-party service, be aware that any header the client sends (for example `Authorization`, `Cookie`, or internal application headers) is forwarded to that provider unless it is overridden by `auth.header`. If the client should not expose certain headers to the LLM provider, strip them before the request reaches `ai-proxy-multi`, for example with the [`proxy-rewrite`](./proxy-rewrite.md) plugin. diff --git a/docs/en/latest/plugins/ai-proxy.md b/docs/en/latest/plugins/ai-proxy.md index 75d682416c17..0fe9c73dacdb 100644 --- a/docs/en/latest/plugins/ai-proxy.md +++ b/docs/en/latest/plugins/ai-proxy.md @@ -141,7 +141,7 @@ When both `llm_options` and `request_body` are configured, `llm_options` is appl ## Request Header Forwarding -By default, `ai-proxy` forwards the incoming client request headers to the configured LLM upstream. Only `Host`, `Content-Length`, `Accept-Encoding`, `Connection`, and `Transfer-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under `auth.header` are merged on top and take precedence over client headers of the same name. +By default, `ai-proxy` forwards the incoming client request headers to the configured LLM upstream. Only `Host`, `Content-Length`, and `Accept-Encoding` are dropped, and `Content-Type` is forced to `application/json`. Headers configured under `auth.header` are merged on top and take precedence over client headers of the same name. Because the LLM upstream is often a third-party service, be aware that any header the client sends (for example `Authorization`, `Cookie`, or internal application headers) is forwarded to that provider unless it is overridden by `auth.header`. If the client should not expose certain headers to the LLM provider, strip them before the request reaches `ai-proxy`, for example with the [`proxy-rewrite`](./proxy-rewrite.md) plugin. diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index c24589e9e480..e67375593ced 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -520,33 +520,3 @@ plugin_attr: --- response_body lua-resty-http request: {"model":"m"} status: 200 - - - -=== TEST 11: hop-by-hop headers are not forwarded to the LLM upstream ---- config - location /t { - content_by_lua_block { - local transport = require("apisix.plugins.ai-transport.http") - local headers = transport.construct_forward_headers({}, { - ["Host"] = "client.example.com", - ["Content-Length"] = "12", - ["Accept-Encoding"] = "gzip", - ["Connection"] = "close", - ["Transfer-Encoding"] = "chunked", - ["X-Request-Id"] = "kept", - }) - - local names = {} - for k in pairs(headers) do - table.insert(names, k) - end - table.sort(names) - for _, k in ipairs(names) do - ngx.say(k, ": ", headers[k]) - end - } - } ---- response_body -content-type: application/json -x-request-id: kept From 02115b85dd5a195dad2441de64c4a7057417fc4d Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Wed, 5 Aug 2026 16:09:01 +0545 Subject: [PATCH 03/13] change(ai-proxy): name the HTTP client explicitly, default to ngx_http_ffi_client plugin_attr.ai-proxy.http_client took auto, ffi or lua-resty-http, and auto made the choice implicit in what the runtime happened to carry. It now takes one of the two client names, ngx_http_ffi_client or lua-resty-http, and defaults to the first. A runtime built without the module still falls back rather than failing the request, and says so at warn level. Error level would put a line in the log for every AI request on such a runtime. t/plugin/ai-transport-http.t TEST 11 drives the lua-resty-http path against a real upstream with nothing stubbed, so the path that config selects is covered end to end rather than only through a stub. --- apisix/cli/config.lua | 2 +- apisix/plugins/ai-transport/http.lua | 39 +++++++++-------- conf/config.yaml.example | 7 +--- docs/en/latest/plugins/ai-proxy-multi.md | 11 +++-- docs/en/latest/plugins/ai-proxy.md | 11 +++-- t/plugin/ai-transport-http.t | 53 ++++++++++++++++++++++-- 6 files changed, 84 insertions(+), 39 deletions(-) diff --git a/apisix/cli/config.lua b/apisix/cli/config.lua index ff1cc7ae60b3..bc9a32a33164 100644 --- a/apisix/cli/config.lua +++ b/apisix/cli/config.lua @@ -309,7 +309,7 @@ local _M = { stream_plugins = { "ip-restriction", "limit-conn", "mqtt-proxy", "syslog", "traffic-split" }, plugin_attr = { ["ai-proxy"] = { - http_client = "auto" + http_client = "ngx_http_ffi_client" }, ["log-rotate"] = { timeout = 10000, diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index 690df57dbd9a..6c2da0b65580 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -29,6 +29,8 @@ local type = type local str_lower = string.lower local tostring = tostring +local FFI_CLIENT = "ngx_http_ffi_client" +local LUA_RESTY_HTTP = "lua-resty-http" local FFI_CLIENT_MODULE = "resty.ngx_http_ffi_client" local _M = {} @@ -38,12 +40,10 @@ local ffi_client_resolved --- Pick the outbound HTTP client. --- `ngx_http_ffi_client` is a C client with the same object API as --- lua-resty-http and roughly a third of its outbound CPU cost, but it only --- exists when the gateway runtime was built with the module. It is preferred --- whenever present, and lua-resty-http stays the fallback. --- `plugin_attr.ai-proxy.http_client` forces the choice: "auto" (default), --- "ffi" or "lua-resty-http". +-- `plugin_attr.ai-proxy.http_client` names it: "ngx_http_ffi_client", the +-- default, or "lua-resty-http". The first is a C client with the same object +-- API as the second and around half its outbound CPU cost, and it exists only +-- when the gateway runtime was built with the module. -- Resolved once per worker, on first request, because local_conf is not -- readable while the module is still loading. local function resolve_ffi_client() @@ -54,22 +54,24 @@ local function resolve_ffi_client() local local_conf = core.config.local_conf() local want = core.table.try_read_attr(local_conf, "plugin_attr", - "ai-proxy", "http_client") or "auto" + "ai-proxy", "http_client") or FFI_CLIENT - if want == "lua-resty-http" then - core.log.info("ai transport pinned to lua-resty-http") + if want == LUA_RESTY_HTTP then + core.log.info("ai transport uses ", LUA_RESTY_HTTP) return nil end + if want ~= FFI_CLIENT then + core.log.error("unknown plugin_attr.ai-proxy.http_client \"", want, + "\", using ", FFI_CLIENT) + end + local ok, mod = pcall(require, FFI_CLIENT_MODULE) if not ok or type(mod) ~= "table" then - if want == "ffi" then - core.log.error("plugin_attr.ai-proxy.http_client is \"ffi\" but ", - FFI_CLIENT_MODULE, " is missing: ", mod) - else - core.log.info(FFI_CLIENT_MODULE, " is not available, ", - "using lua-resty-http") - end + -- a runtime built without the module; warn rather than error, since + -- every request on such a runtime would otherwise log one + core.log.warn(FFI_CLIENT_MODULE, " is not available, ", + "falling back to ", LUA_RESTY_HTTP, ": ", mod) return nil end @@ -79,7 +81,7 @@ local function resolve_ffi_client() end ---- Create an HTTP client, preferring the FFI one. +--- Create an HTTP client. -- The Lua half of `ngx_http_ffi_client` loads even when the C module is not -- compiled into the runtime; new() is what reports that, so a failure here -- falls back for the rest of the worker's life. @@ -92,7 +94,8 @@ local function new_client() end core.log.warn("failed to create ", FFI_CLIENT_MODULE, ", ", - "falling back to lua-resty-http: ", err or "unknown") + "falling back to ", LUA_RESTY_HTTP, ": ", + err or "unknown") ffi_client = nil end diff --git a/conf/config.yaml.example b/conf/config.yaml.example index c24b67571128..f38be4a4a022 100644 --- a/conf/config.yaml.example +++ b/conf/config.yaml.example @@ -643,11 +643,8 @@ stream_plugins: # stream plugin list (sorted by priority) # - name: pingpong plugin_attr: # Plugin attributes ai-proxy: # Plugin: ai-proxy, ai-proxy-multi - http_client: auto # HTTP client the AI plugins use to reach the LLM upstream. - # auto: use ngx_http_ffi_client when the runtime provides it, - # else lua-resty-http. - # ffi: require ngx_http_ffi_client. - # lua-resty-http: always use lua-resty-http. + http_client: ngx_http_ffi_client # HTTP client the AI plugins use to reach the + # LLM upstream: ngx_http_ffi_client or lua-resty-http. log-rotate: # Plugin: log-rotate timeout: 10000 # maximum wait time for a log rotation(unit: millisecond) interval: 3600 # Set the log rotate interval in seconds. diff --git a/docs/en/latest/plugins/ai-proxy-multi.md b/docs/en/latest/plugins/ai-proxy-multi.md index ebd9f8571606..a7be8c34951d 100644 --- a/docs/en/latest/plugins/ai-proxy-multi.md +++ b/docs/en/latest/plugins/ai-proxy-multi.md @@ -154,19 +154,18 @@ Because the LLM upstream is often a third-party service, be aware that any heade ## Upstream HTTP Client -Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs roughly a third of the outbound CPU time of `lua-resty-http`, whenever the APISIX runtime was built with that module. Runtimes without it keep using `lua-resty-http`, and both clients behave the same on the wire. +Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs around half the outbound CPU time of `lua-resty-http`. Both clients behave the same on the wire. -Set `plugin_attr.ai-proxy.http_client` in `config.yaml` to pin the choice: +`plugin_attr.ai-proxy.http_client` in `config.yaml` names the client: ```yaml plugin_attr: ai-proxy: - http_client: auto # auto, ffi, or lua-resty-http + http_client: ngx_http_ffi_client # or lua-resty-http ``` -- `auto` (default): use `ngx_http_ffi_client` when the runtime provides it, otherwise `lua-resty-http`. -- `ffi`: require `ngx_http_ffi_client`, and log an error if it is missing. -- `lua-resty-http`: always use `lua-resty-http`. +- `ngx_http_ffi_client` (default): the C client. It exists only when the APISIX runtime was built with the module; on a runtime without it the transport logs a warning and uses `lua-resty-http` instead. +- `lua-resty-http`: the Lua client, on every runtime. The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. diff --git a/docs/en/latest/plugins/ai-proxy.md b/docs/en/latest/plugins/ai-proxy.md index 0fe9c73dacdb..02cbe4a09dd3 100644 --- a/docs/en/latest/plugins/ai-proxy.md +++ b/docs/en/latest/plugins/ai-proxy.md @@ -147,19 +147,18 @@ Because the LLM upstream is often a third-party service, be aware that any heade ## Upstream HTTP Client -Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs roughly a third of the outbound CPU time of `lua-resty-http`, whenever the APISIX runtime was built with that module. Runtimes without it keep using `lua-resty-http`, and both clients behave the same on the wire. +Requests to the LLM upstream go through `ngx_http_ffi_client`, a C HTTP client that costs around half the outbound CPU time of `lua-resty-http`. Both clients behave the same on the wire. -Set `plugin_attr.ai-proxy.http_client` in `config.yaml` to pin the choice: +`plugin_attr.ai-proxy.http_client` in `config.yaml` names the client: ```yaml plugin_attr: ai-proxy: - http_client: auto # auto, ffi, or lua-resty-http + http_client: ngx_http_ffi_client # or lua-resty-http ``` -- `auto` (default): use `ngx_http_ffi_client` when the runtime provides it, otherwise `lua-resty-http`. -- `ffi`: require `ngx_http_ffi_client`, and log an error if it is missing. -- `lua-resty-http`: always use `lua-resty-http`. +- `ngx_http_ffi_client` (default): the C client. It exists only when the APISIX runtime was built with the module; on a runtime without it the transport logs a warning and uses `lua-resty-http` instead. +- `lua-resty-http`: the Lua client, on every runtime. The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index e67375593ced..284621f93293 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -356,7 +356,7 @@ request: connection reset by peer => 500 -=== TEST 8: transport prefers ngx_http_ffi_client when the runtime provides it +=== TEST 8: ngx_http_ffi_client is the default client --- config location /t { content_by_lua_block { @@ -409,7 +409,7 @@ status: 200 -=== TEST 9: transport falls back to lua-resty-http when the C module is absent +=== TEST 9: a runtime without the C module falls back and logs an error --- config location /t { content_by_lua_block { @@ -464,7 +464,7 @@ falling back to lua-resty-http: ngx_http_ffi_client_module is not loaded -=== TEST 10: plugin_attr.ai-proxy.http_client pins lua-resty-http +=== TEST 10: plugin_attr.ai-proxy.http_client selects lua-resty-http --- extra_yaml_config plugin_attr: ai-proxy: @@ -520,3 +520,50 @@ plugin_attr: --- response_body lua-resty-http request: {"model":"m"} status: 200 + + + +=== TEST 11: the lua-resty-http path reaches a real upstream +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http +--- config + location = /mock-llm { + content_by_lua_block { + ngx.req.read_body() + ngx.header["Content-Type"] = "application/json" + ngx.print('{"echo":', ngx.req.get_body_data(), '}') + } + } + + location /t { + content_by_lua_block { + -- no stubbing here: this drives the real lua-resty-http + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + method = "POST", + scheme = "http", + host = "127.0.0.1", + port = 1984, + path = "/mock-llm", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 2000) + if not res then + ngx.say("err: ", err) + return + end + + ngx.say("status: ", res.status) + ngx.say("content-type: ", res.headers["Content-Type"]) + ngx.say("body: ", res:read_body()) + transport.set_keepalive(res, 60000, 30) + } + } +--- response_body +status: 200 +content-type: application/json +body: {"echo":{"model":"m"}} +--- no_error_log +[error] From 9714163a77c70937f1f093d52f87e98b00f2a078 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Thu, 6 Aug 2026 15:43:38 +0545 Subject: [PATCH 04/13] fix(ai-transport): require the configured HTTP client instead of falling back Resolve the client from plugin_attr.ai-proxy.http_client through a name to module map, validate the name against an enum schema, and cache it only once it has loaded. A missing or unusable client is now an error the request carries, never a silent switch to the other one. Bump APISIX_RUNTIME to 1.3.12, the first runtime built with ngx_http_ffi_client. --- .requirements | 2 +- apisix/plugins/ai-transport/http.lua | 83 ++++++++-------- ci/linux-install-openresty.sh | 6 +- docs/en/latest/plugins/ai-proxy-multi.md | 2 +- docs/en/latest/plugins/ai-proxy.md | 2 +- t/plugin/ai-transport-http.t | 119 ++++++++++++++++++++--- 6 files changed, 155 insertions(+), 59 deletions(-) diff --git a/.requirements b/.requirements index c4546b254777..bb36ebb09bbb 100644 --- a/.requirements +++ b/.requirements @@ -17,5 +17,5 @@ APISIX_PACKAGE_NAME=apisix -APISIX_RUNTIME=1.3.11 +APISIX_RUNTIME=1.3.12 APISIX_DASHBOARD_COMMIT=c8d3466d3c36386d3888efbc8250cd8183c77298 diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index 6c2da0b65580..053b43fcd1e0 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -19,7 +19,6 @@ -- Provides HTTP client lifecycle management for AI provider requests. local core = require("apisix.core") -local http = require("resty.http") local ngx_now = ngx.now local pairs = pairs local ipairs = ipairs @@ -31,12 +30,27 @@ local tostring = tostring local FFI_CLIENT = "ngx_http_ffi_client" local LUA_RESTY_HTTP = "lua-resty-http" -local FFI_CLIENT_MODULE = "resty.ngx_http_ffi_client" + +-- the client name in the config is not the module name +local CLIENT_MODULES = { + [FFI_CLIENT] = "resty.ngx_http_ffi_client", + [LUA_RESTY_HTTP] = "resty.http", +} + +local attr_schema = { + type = "object", + properties = { + http_client = { + type = "string", + enum = {FFI_CLIENT, LUA_RESTY_HTTP}, + default = FFI_CLIENT, + }, + }, +} local _M = {} -local ffi_client -local ffi_client_resolved +local http_client --- Pick the outbound HTTP client. @@ -44,62 +58,49 @@ local ffi_client_resolved -- default, or "lua-resty-http". The first is a C client with the same object -- API as the second and around half its outbound CPU cost, and it exists only -- when the gateway runtime was built with the module. --- Resolved once per worker, on first request, because local_conf is not --- readable while the module is still loading. -local function resolve_ffi_client() - if ffi_client_resolved then - return ffi_client +-- Resolved on first request, because local_conf is not readable while the +-- module is still loading, and cached only once a client has been loaded. +local function resolve_client() + if http_client then + return http_client end - ffi_client_resolved = true local local_conf = core.config.local_conf() - local want = core.table.try_read_attr(local_conf, "plugin_attr", - "ai-proxy", "http_client") or FFI_CLIENT + local attr = core.table.try_read_attr(local_conf, "plugin_attr", "ai-proxy") or {} - if want == LUA_RESTY_HTTP then - core.log.info("ai transport uses ", LUA_RESTY_HTTP) - return nil + local ok, err = core.schema.check(attr_schema, attr) + if not ok then + core.log.error("invalid plugin_attr.ai-proxy: ", err) + return nil, "invalid plugin_attr.ai-proxy: " .. err end - if want ~= FFI_CLIENT then - core.log.error("unknown plugin_attr.ai-proxy.http_client \"", want, - "\", using ", FFI_CLIENT) - end + local name = attr.http_client or FFI_CLIENT + local module_name = CLIENT_MODULES[name] - local ok, mod = pcall(require, FFI_CLIENT_MODULE) + local mod + ok, mod = pcall(require, module_name) if not ok or type(mod) ~= "table" then - -- a runtime built without the module; warn rather than error, since - -- every request on such a runtime would otherwise log one - core.log.warn(FFI_CLIENT_MODULE, " is not available, ", - "falling back to ", LUA_RESTY_HTTP, ": ", mod) - return nil + core.log.error(module_name, " is not available: ", mod) + return nil, module_name .. " is not available: " .. tostring(mod) end - ffi_client = mod + http_client = mod - return ffi_client + return http_client end --- Create an HTTP client. -- The Lua half of `ngx_http_ffi_client` loads even when the C module is not --- compiled into the runtime; new() is what reports that, so a failure here --- falls back for the rest of the worker's life. +-- compiled into the runtime; new() is what reports that. Either way the +-- failure is returned, never worked around with the other client. local function new_client() - local client = resolve_ffi_client() - if client then - local httpc, err = client.new() - if httpc then - return httpc - end - - core.log.warn("failed to create ", FFI_CLIENT_MODULE, ", ", - "falling back to ", LUA_RESTY_HTTP, ": ", - err or "unknown") - ffi_client = nil + local client, err = resolve_client() + if not client then + return nil, err end - return http.new() + return client.new() end diff --git a/ci/linux-install-openresty.sh b/ci/linux-install-openresty.sh index 1200b8e3677f..1eca51115e58 100755 --- a/ci/linux-install-openresty.sh +++ b/ci/linux-install-openresty.sh @@ -61,7 +61,7 @@ else sudo apt-get -y update --fix-missing sudo apt-get install -y build-essential gcc g++ cpanminus libxml2-dev libxslt-dev - if [ "$APISIX_RUNTIME" != "1.3.11" ]; then + if [ "$APISIX_RUNTIME" != "1.3.12" ]; then echo "Please update the apisix-runtime-debug checksum for APISIX_RUNTIME=$APISIX_RUNTIME" >&2 exit 1 fi @@ -69,11 +69,11 @@ else case "$ARCH" in x86_64|amd64) DEB_ARCH="amd64" - EXPECTED_SHA256="6c03f0a47a80e84c595c7e067f7d05fc69890237f9191af55108a284b356c4ee" + EXPECTED_SHA256="369a7d3ac8dbfa8a04576a7fc6aab209b5b4e3063dc690f5f7add8736008e606" ;; arm64|aarch64) DEB_ARCH="arm64" - EXPECTED_SHA256="cdc124262a1acb2de170f12a2180cdc357ba867d6447cd08a9ba1639994d4e50" + EXPECTED_SHA256="dea90c0ffbd949bcce0fa35966650d89baf8bd649d8da26f703a35c793b828bc" ;; *) echo "Unsupported architecture: $ARCH" >&2 diff --git a/docs/en/latest/plugins/ai-proxy-multi.md b/docs/en/latest/plugins/ai-proxy-multi.md index a7be8c34951d..ea2640236014 100644 --- a/docs/en/latest/plugins/ai-proxy-multi.md +++ b/docs/en/latest/plugins/ai-proxy-multi.md @@ -164,7 +164,7 @@ plugin_attr: http_client: ngx_http_ffi_client # or lua-resty-http ``` -- `ngx_http_ffi_client` (default): the C client. It exists only when the APISIX runtime was built with the module; on a runtime without it the transport logs a warning and uses `lua-resty-http` instead. +- `ngx_http_ffi_client` (default): the C client. It requires an APISIX runtime built with the module, which the runtime pinned in `.requirements` is. On a runtime without it, the request fails and the error names the missing module; the plugin never silently switches clients. - `lua-resty-http`: the Lua client, on every runtime. The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. diff --git a/docs/en/latest/plugins/ai-proxy.md b/docs/en/latest/plugins/ai-proxy.md index 02cbe4a09dd3..c9f132bbb611 100644 --- a/docs/en/latest/plugins/ai-proxy.md +++ b/docs/en/latest/plugins/ai-proxy.md @@ -157,7 +157,7 @@ plugin_attr: http_client: ngx_http_ffi_client # or lua-resty-http ``` -- `ngx_http_ffi_client` (default): the C client. It exists only when the APISIX runtime was built with the module; on a runtime without it the transport logs a warning and uses `lua-resty-http` instead. +- `ngx_http_ffi_client` (default): the C client. It requires an APISIX runtime built with the module, which the runtime pinned in `.requirements` is. On a runtime without it, the request fails and the error names the missing module; the plugin never silently switches clients. - `lua-resty-http`: the Lua client, on every runtime. The setting covers `ai-proxy`, `ai-proxy-multi`, and `ai-request-rewrite`, which share the same transport. diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index 284621f93293..4ddcc9bef593 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -409,7 +409,7 @@ status: 200 -=== TEST 9: a runtime without the C module falls back and logs an error +=== TEST 9: a runtime without the C module fails the request --- config location /t { content_by_lua_block { @@ -419,13 +419,11 @@ status: 200 package.loaded["resty.http"] = { new = function() + ngx.say("lua-resty-http client created") return { set_timeout = function() end, connect = function() return true end, - request = function(_, params) - ngx.say("lua-resty-http request: ", params.body) - return {headers = {}, status = 200} - end, + request = function() return {headers = {}, status = 200} end, } end, } @@ -455,12 +453,8 @@ status: 200 } } --- response_body -lua-resty-http request: {"model":"m"} -status: 200 -lua-resty-http request: {"model":"m"} -status: 200 ---- error_log -falling back to lua-resty-http: ngx_http_ffi_client_module is not loaded +status: failed to create http client: ngx_http_ffi_client_module is not loaded +status: failed to create http client: ngx_http_ffi_client_module is not loaded @@ -539,7 +533,17 @@ plugin_attr: location /t { content_by_lua_block { - -- no stubbing here: this drives the real lua-resty-http + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + + -- lua-resty-http stays real; only the client that must not be + -- picked is stubbed, so a regression in the selection shows up + package.loaded["resty.ngx_http_ffi_client"] = { + new = function() + ngx.log(ngx.ERR, "unexpected ngx_http_ffi_client selection") + return nil, "unexpected ngx_http_ffi_client selection" + end, + } + local transport = require("apisix.plugins.ai-transport.http") local res, err = transport.request({ method = "POST", @@ -550,6 +554,9 @@ plugin_attr: headers = {["content-type"] = "application/json"}, body = {model = "m"}, }, 2000) + + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + if not res then ngx.say("err: ", err) return @@ -567,3 +574,91 @@ content-type: application/json body: {"echo":{"model":"m"}} --- no_error_log [error] +unexpected ngx_http_ffi_client selection + + + +=== TEST 12: a runtime whose ngx_http_ffi_client module is missing fails the request +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + ngx.say("lua-resty-http client created") + return { + set_timeout = function() end, + connect = function() return true end, + request = function() return {headers = {}, status = 200} end, + } + end, + } + + -- require() returns this instead of the module table + package.loaded["resty.ngx_http_ffi_client"] = "not a module" + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.http"] = orig_http + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +status: failed to create http client: resty.ngx_http_ffi_client is not available: not a module +--- error_log +resty.ngx_http_ffi_client is not available: not a module + + + +=== TEST 13: an unknown plugin_attr.ai-proxy.http_client fails the request +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: curl +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + ngx.say("lua-resty-http client created") + return { + set_timeout = function() end, + connect = function() return true end, + request = function() return {headers = {}, status = 200} end, + } + end, + } + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.http"] = orig_http + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +status: failed to create http client: invalid plugin_attr.ai-proxy: property "http_client" validation failed: matches none of the enum values +--- error_log +invalid plugin_attr.ai-proxy: property "http_client" validation failed From 11229582e60489cf0e725be5093c249a4cc50cce Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Thu, 6 Aug 2026 17:03:10 +0545 Subject: [PATCH 05/13] fix(ai-transport): resolve the upstream name for the C client Cosockets get their hostnames resolved by apisix/patch.lua, which routes them through core.resolver and so honours dns_resolver, /etc/hosts and the search domains. ngx_http_ffi_client dials from C and never touches a cosocket, so it saw only nginx's `resolver` and failed on every name that layer cannot answer. The transport now resolves the name the same way before handing the address to the C client, keeping the original for the Host header and the SNI. Pin the body-encoding and error-mapping cases to lua-resty-http: they stub resty.http, so under the C-client default they were driving the real client at a dead port instead of the stub. --- apisix/plugins/ai-transport/http.lua | 53 ++++++++++++++++++++ t/plugin/ai-transport-http.t | 72 ++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index 053b43fcd1e0..cf7cfe5b56e3 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -51,6 +51,7 @@ local attr_schema = { local _M = {} local http_client +local http_client_is_ffi --- Pick the outbound HTTP client. @@ -85,11 +86,50 @@ local function resolve_client() end http_client = mod + http_client_is_ffi = name == FFI_CLIENT return http_client end +--- Resolve the upstream name the way every other socket in the gateway does. +-- Cosockets are patched (apisix/patch.lua) to run names through +-- core.resolver, which honours dns_resolver, /etc/hosts and the search +-- domains. The C client dials on its own and only sees nginx's `resolver`, +-- so the name is resolved here and kept for the Host header and the SNI. +local function resolve_upstream_host(params) + local host = params.host + if not host + or core.utils.parse_ipv4(host) + or core.utils.parse_ipv6(host) + then + return true + end + + local ip, err = core.resolver.parse_domain(host) + if not ip then + return nil, "failed to parse domain: " .. (err or "unknown") + end + + params.ssl_server_name = params.ssl_server_name or host + + local headers = params.headers or {} + if not headers["Host"] and not headers["host"] then + local default_port = params.scheme == "https" and 443 or 80 + if params.port and tonumber(params.port) ~= default_port then + headers["Host"] = host .. ":" .. params.port + else + headers["Host"] = host + end + end + params.headers = headers + + params.host = ip + + return true +end + + --- Create an HTTP client. -- The Lua half of `ngx_http_ffi_client` loads even when the C module is not -- compiled into the runtime; new() is what reports that. Either way the @@ -184,6 +224,19 @@ function _M.request(params, timeout) local upstream_scheme = params.scheme or "http" local t0 = ngx_now() + if http_client_is_ffi then + local resolved, rerr = resolve_upstream_host(params) + if not resolved then + return nil, "connect: " .. rerr, { + upstream_addr = upstream_addr, + upstream_host = upstream_host, + upstream_scheme = upstream_scheme, + upstream_uri = params.path, + t0 = t0, + } + end + end + local ok, err = httpc:connect(params) if not ok then return nil, "connect: " .. (err or "unknown"), { diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index 4ddcc9bef593..449064c18a21 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -33,6 +33,10 @@ run_tests; __DATA__ === TEST 1: AI transport encodes upstream request body with sorted keys and preserves empty arrays +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http --- config location /t { content_by_lua_block { @@ -96,6 +100,10 @@ __DATA__ === TEST 2: AI transport falls back to cjson when rapidjson encode fails +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http --- config location /t { content_by_lua_block { @@ -197,6 +205,10 @@ rapidjson nested empty table: \{\} === TEST 4: AI transport preserves JSON null values from cjson decode +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http --- config location /t { content_by_lua_block { @@ -242,6 +254,10 @@ failed to encode AI request body with rapidjson: === TEST 5: AI transport preserves manually constructed arrays +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http --- config location /t { content_by_lua_block { @@ -292,6 +308,10 @@ failed to encode AI request body with rapidjson: === TEST 6: connect timeout ("Operation timed out") maps to 504 +--- extra_yaml_config +plugin_attr: + ai-proxy: + http_client: lua-resty-http --- config location /t { content_by_lua_block { @@ -662,3 +682,55 @@ plugin_attr: status: failed to create http client: invalid plugin_attr.ai-proxy: property "http_client" validation failed: matches none of the enum values --- error_log invalid plugin_attr.ai-proxy: property "http_client" validation failed + + + +=== TEST 14: the C client resolves a hostname through the gateway's resolver +--- config + location /t { + content_by_lua_block { + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + -- the C client dials on its own, so the transport has to hand it an + -- address; the name has to survive in the Host header + package.loaded["resty.ngx_http_ffi_client"] = { + new = function() + return { + set_timeout = function() end, + connect = function(_, params) + ngx.say("connect host: ", params.host) + ngx.say("ssl_server_name: ", params.ssl_server_name) + return 1 + end, + request = function(_, params) + ngx.say("Host header: ", params.headers["Host"]) + return {headers = {}, status = 200} + end, + } + end, + } + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + scheme = "http", + host = "localhost", + port = 1980, + path = "/v1/chat/completions", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +connect host: 127.0.0.1 +ssl_server_name: localhost +Host header: localhost:1980 +status: 200 +--- no_error_log +[error] From 79b1f2a5edf0f4abfce4a63d3a03f13223246de7 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Thu, 6 Aug 2026 17:33:43 +0545 Subject: [PATCH 06/13] style(ai-transport): localize tonumber for lj-releng --- apisix/plugins/ai-transport/http.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index cf7cfe5b56e3..3b1ddc434370 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -26,6 +26,7 @@ local pcall = pcall local require = require local type = type local str_lower = string.lower +local tonumber = tonumber local tostring = tostring local FFI_CLIENT = "ngx_http_ffi_client" From c4b86deffc873bbcb278a553bfe4326aa8a9d68c Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 10 Aug 2026 12:05:45 +0545 Subject: [PATCH 07/13] chore: bump APISIX_RUNTIME to 1.3.15 1.3.15 is the first runtime built with ngx_http_ffi_client v0.1.2, which carries the three fixes this change depends on: request bodies containing CR or LF are no longer rejected, connection errors respect lua_socket_log_errors, and the trust store falls back to lua_ssl_trusted_certificate so verified TLS works on a bundled OpenSSL. --- .requirements | 2 +- ci/linux-install-openresty.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.requirements b/.requirements index bb36ebb09bbb..03d73a39e7e4 100644 --- a/.requirements +++ b/.requirements @@ -17,5 +17,5 @@ APISIX_PACKAGE_NAME=apisix -APISIX_RUNTIME=1.3.12 +APISIX_RUNTIME=1.3.15 APISIX_DASHBOARD_COMMIT=c8d3466d3c36386d3888efbc8250cd8183c77298 diff --git a/ci/linux-install-openresty.sh b/ci/linux-install-openresty.sh index 1eca51115e58..51ac40d4fac9 100755 --- a/ci/linux-install-openresty.sh +++ b/ci/linux-install-openresty.sh @@ -61,7 +61,7 @@ else sudo apt-get -y update --fix-missing sudo apt-get install -y build-essential gcc g++ cpanminus libxml2-dev libxslt-dev - if [ "$APISIX_RUNTIME" != "1.3.12" ]; then + if [ "$APISIX_RUNTIME" != "1.3.15" ]; then echo "Please update the apisix-runtime-debug checksum for APISIX_RUNTIME=$APISIX_RUNTIME" >&2 exit 1 fi @@ -69,11 +69,11 @@ else case "$ARCH" in x86_64|amd64) DEB_ARCH="amd64" - EXPECTED_SHA256="369a7d3ac8dbfa8a04576a7fc6aab209b5b4e3063dc690f5f7add8736008e606" + EXPECTED_SHA256="de58ae46fdb7d5cee61e3ca8e6dbd07e641e0451835c49430fe8a1a13d26f2b9" ;; arm64|aarch64) DEB_ARCH="arm64" - EXPECTED_SHA256="dea90c0ffbd949bcce0fa35966650d89baf8bd649d8da26f703a35c793b828bc" + EXPECTED_SHA256="7f14016348f161c42426bf8f560c879867b1bf226388c6798b746f2adbc9fdbd" ;; *) echo "Unsupported architecture: $ARCH" >&2 From adc387f5deb3015b80a86d3d8de5e018d2665943 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 10 Aug 2026 13:26:15 +0545 Subject: [PATCH 08/13] test(ai-transport): drive the real C client, not just stubs The selection tests stub resty.ngx_http_ffi_client, so module loading, the FFI boundary and the connection lifecycle were never exercised. Add cases that run the real client against local upstreams: a buffered request, an SSE response read to completion through body_reader, three requests over one pooled connection (asserted with the upstream's connection_requests counter), a hostname upstream that only resolves through core.resolver, and TLS with ssl_verify on and no per-call CA. They skip where the module is absent rather than failing for the wrong reason. Also cover a genuine require() failure: assigning a string to package.loaded makes require() succeed, so the old case only reached the non-table branch. A package.preload loader that raises reaches the pcall(require) failure path. --- t/plugin/ai-transport-http.t | 287 ++++++++++++++++++++++++++++++++++- 1 file changed, 286 insertions(+), 1 deletion(-) diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index 449064c18a21..d0ea698d0741 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -598,7 +598,7 @@ unexpected ngx_http_ffi_client selection -=== TEST 12: a runtime whose ngx_http_ffi_client module is missing fails the request +=== TEST 12: a module that loads but is not a table fails the request --- config location /t { content_by_lua_block { @@ -734,3 +734,288 @@ Host header: localhost:1980 status: 200 --- no_error_log [error] + + + +=== TEST 15: a module whose loader raises fails the request +--- config + location /t { + content_by_lua_block { + local orig_http = package.loaded["resty.http"] + local orig_ffi = package.loaded["resty.ngx_http_ffi_client"] + local orig_preload = package.preload["resty.ngx_http_ffi_client"] + local orig_transport = package.loaded["apisix.plugins.ai-transport.http"] + + package.loaded["resty.http"] = { + new = function() + ngx.say("lua-resty-http client created") + return { + set_timeout = function() end, + connect = function() return true end, + request = function() return {headers = {}, status = 200} end, + } + end, + } + + -- an unloaded module whose loader raises: this is what a require() + -- failure looks like, as opposed to one that loads the wrong thing + package.loaded["resty.ngx_http_ffi_client"] = nil + package.preload["resty.ngx_http_ffi_client"] = function() + error("simulated loader failure", 0) + end + + package.loaded["apisix.plugins.ai-transport.http"] = nil + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + host = "127.0.0.1", + port = 80, + path = "/", + body = {model = "m"}, + }, 1000) + ngx.say("status: ", res and res.status or err) + + package.loaded["resty.http"] = orig_http + package.loaded["resty.ngx_http_ffi_client"] = orig_ffi + package.preload["resty.ngx_http_ffi_client"] = orig_preload + package.loaded["apisix.plugins.ai-transport.http"] = orig_transport + } + } +--- response_body +status: failed to create http client: resty.ngx_http_ffi_client is not available: simulated loader failure +--- error_log +resty.ngx_http_ffi_client is not available: simulated loader failure + + + +=== TEST 16: the C client carries a buffered request to a real upstream +--- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- config + location = /mock-buffered { + content_by_lua_block { + ngx.req.read_body() + ngx.header["Content-Type"] = "application/json" + ngx.print('{"echo":', ngx.req.get_body_data(), '}') + } + } + + location /t { + content_by_lua_block { + -- nothing stubbed: this is the real C client on the default setting + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + method = "POST", + scheme = "http", + host = "127.0.0.1", + port = 1984, + path = "/mock-buffered", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 2000) + if not res then + ngx.say("err: ", err) + return + end + ngx.say("status: ", res.status) + ngx.say("content-type: ", res.headers["Content-Type"]) + ngx.say("body: ", res:read_body()) + transport.set_keepalive(res, 60000, 30) + } + } +--- response_body +status: 200 +content-type: application/json +body: {"echo":{"model":"m"}} +--- no_error_log +[error] + + + +=== TEST 17: the C client streams an SSE response through body_reader +--- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- config + location = /mock-sse { + content_by_lua_block { + ngx.header["Content-Type"] = "text/event-stream" + for i = 1, 3 do + ngx.print("data: {\"n\":", i, "}\n\n") + ngx.flush(true) + end + ngx.print("data: [DONE]\n\n") + ngx.flush(true) + } + } + + location /t { + content_by_lua_block { + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + method = "POST", + scheme = "http", + host = "127.0.0.1", + port = 1984, + path = "/mock-sse", + headers = {["content-type"] = "application/json"}, + body = {model = "m", stream = true}, + }, 2000) + if not res then + ngx.say("err: ", err) + return + end + ngx.say("status: ", res.status) + ngx.say("content-type: ", res.headers["Content-Type"]) + + local reader = res.body_reader + if not reader then + ngx.say("no body_reader") + return + end + local buf = {} + while true do + local chunk, rerr = reader(4096) + if rerr then + ngx.say("read err: ", rerr) + break + end + if not chunk then + break + end + buf[#buf + 1] = chunk + end + local body = table.concat(buf) + local n = select(2, body:gsub("data: ", "")) + ngx.say("sse events: ", n) + ngx.say("saw done: ", body:find("[DONE]", 1, true) ~= nil) + } + } +--- response_body +status: 200 +content-type: text/event-stream +sse events: 4 +saw done: true +--- no_error_log +[error] + + + +=== TEST 18: the C client reuses a pooled connection across requests +--- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- config + location = /mock-keepalive { + # counts requests served on this connection: 1,2,3 proves one + # pooled connection carried all three + content_by_lua_block { ngx.print("req ", ngx.var.connection_requests) } + } + + location /t { + content_by_lua_block { + local transport = require("apisix.plugins.ai-transport.http") + for i = 1, 3 do + local res, err = transport.request({ + method = "POST", + scheme = "http", + host = "127.0.0.1", + port = 1984, + path = "/mock-keepalive", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 2000) + if not res then + ngx.say(i, ": err ", err) + return + end + local body = res:read_body() + transport.set_keepalive(res, 60000, 30) + ngx.say(i, ": ", res.status, " ", body) + end + } + } +--- response_body +1: 200 req 1 +2: 200 req 2 +3: 200 req 3 +--- no_error_log +[error] + + + +=== TEST 19: the C client reaches an upstream named by hostname +--- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- config + location = /mock-host { + content_by_lua_block { + ngx.print("host header: ", ngx.var.http_host) + } + } + + location /t { + content_by_lua_block { + -- "localhost" only resolves through core.resolver, so this drives + -- resolve_upstream_host with the real client behind it + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + method = "POST", + scheme = "http", + host = "localhost", + port = 1984, + path = "/mock-host", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 2000) + if not res then + ngx.say("err: ", err) + return + end + ngx.say("status: ", res.status) + ngx.say(res:read_body()) + } + } +--- response_body +status: 200 +host header: localhost:1984 +--- no_error_log +[error] + + + +=== TEST 20: the C client verifies TLS against the configured trust store +--- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- http_config + server { + listen 21981 ssl; + ssl_certificate cert/apisix.crt; + ssl_certificate_key cert/apisix.key; + server_name test.com; + location = /mock-tls { + content_by_lua_block { ngx.print("tls ok") } + } + } +--- config + location /t { + content_by_lua_block { + -- no per-call CA: the trust store comes from + -- lua_ssl_trusted_certificate, as it does for every cosocket + local transport = require("apisix.plugins.ai-transport.http") + local res, err = transport.request({ + method = "POST", + scheme = "https", + host = "127.0.0.1", + port = 21981, + path = "/mock-tls", + ssl_verify = true, + ssl_server_name = "test.com", + headers = {["content-type"] = "application/json"}, + body = {model = "m"}, + }, 2000) + if not res then + ngx.say("err: ", err) + return + end + ngx.say("status: ", res.status) + ngx.say(res:read_body()) + } + } +--- response_body +status: 200 +tls ok +--- no_error_log +[error] From 1262f54766e2c63c5bb2e110de25165c94e16f7b Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 10 Aug 2026 14:03:36 +0545 Subject: [PATCH 09/13] test(ai-transport): make the real-client guard ask the binary The skip guard checked a hardcoded /usr/local/openresty path, which is not necessarily the runtime under test, and it checked the Lua binding rather than whether the module is compiled in. Ask the binary instead, falling back to bare nginx the way both CIs resolve it (neither sets TEST_NGINX_BINARY; both prepend $OPENRESTY_PREFIX/nginx/sbin to PATH). Also correct the skip count from 2 to 3: Test::Nginx adds a status-code assertion alongside response_body and no_error_log. The file now reports the same subtest total whether these blocks run or skip. --- t/plugin/ai-transport-http.t | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/t/plugin/ai-transport-http.t b/t/plugin/ai-transport-http.t index d0ea698d0741..ca483a04173f 100644 --- a/t/plugin/ai-transport-http.t +++ b/t/plugin/ai-transport-http.t @@ -788,7 +788,7 @@ resty.ngx_http_ffi_client is not available: simulated loader failure === TEST 16: the C client carries a buffered request to a real upstream ---- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- skip_eval: 3: system((($ENV{TEST_NGINX_BINARY} || "nginx") . " -V 2>&1 | grep -q ngx_http_ffi_client")) != 0 --- config location = /mock-buffered { content_by_lua_block { @@ -831,7 +831,7 @@ body: {"echo":{"model":"m"}} === TEST 17: the C client streams an SSE response through body_reader ---- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- skip_eval: 3: system((($ENV{TEST_NGINX_BINARY} || "nginx") . " -V 2>&1 | grep -q ngx_http_ffi_client")) != 0 --- config location = /mock-sse { content_by_lua_block { @@ -898,7 +898,7 @@ saw done: true === TEST 18: the C client reuses a pooled connection across requests ---- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- skip_eval: 3: system((($ENV{TEST_NGINX_BINARY} || "nginx") . " -V 2>&1 | grep -q ngx_http_ffi_client")) != 0 --- config location = /mock-keepalive { # counts requests served on this connection: 1,2,3 proves one @@ -939,7 +939,7 @@ saw done: true === TEST 19: the C client reaches an upstream named by hostname ---- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- skip_eval: 3: system((($ENV{TEST_NGINX_BINARY} || "nginx") . " -V 2>&1 | grep -q ngx_http_ffi_client")) != 0 --- config location = /mock-host { content_by_lua_block { @@ -978,7 +978,7 @@ host header: localhost:1984 === TEST 20: the C client verifies TLS against the configured trust store ---- skip_eval: 2: !-f "/usr/local/openresty/lualib/resty/ngx_http_ffi_client.lua" +--- skip_eval: 3: system((($ENV{TEST_NGINX_BINARY} || "nginx") . " -V 2>&1 | grep -q ngx_http_ffi_client")) != 0 --- http_config server { listen 21981 ssl; From a21da28634098e5cdfea05556eb17b22e11e118e Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 10 Aug 2026 14:40:08 +0545 Subject: [PATCH 10/13] refactor(ai-transport): move client selection into apisix.utils.http The selection, validation and DNS-parity logic sat inside the AI transport, so forward-auth, http-logger and anything else moving off lua-resty-http could not reuse it. It now lives in apisix/utils/http.lua alongside the other shared client factories: the module owns the client names, the schema fragment, loading and caching, and resolve_upstream_host(); the caller owns where the preference comes from and passes the name in. No behaviour change: the transport still reads plugin_attr.ai-proxy.http_client and the whole suite is unchanged. --- apisix/plugins/ai-transport/http.lua | 116 +++--------------- apisix/utils/http.lua | 155 ++++++++++++++++++++++++ t/sse_server_example/sse_server_example | Bin 0 -> 8376514 bytes 3 files changed, 175 insertions(+), 96 deletions(-) create mode 100644 apisix/utils/http.lua create mode 100755 t/sse_server_example/sse_server_example diff --git a/apisix/plugins/ai-transport/http.lua b/apisix/plugins/ai-transport/http.lua index 3b1ddc434370..5620c01f18ba 100644 --- a/apisix/plugins/ai-transport/http.lua +++ b/apisix/plugins/ai-transport/http.lua @@ -19,52 +19,34 @@ -- Provides HTTP client lifecycle management for AI provider requests. local core = require("apisix.core") +local http_client = require("apisix.utils.http") local ngx_now = ngx.now local pairs = pairs local ipairs = ipairs local pcall = pcall -local require = require local type = type local str_lower = string.lower -local tonumber = tonumber local tostring = tostring -local FFI_CLIENT = "ngx_http_ffi_client" -local LUA_RESTY_HTTP = "lua-resty-http" - --- the client name in the config is not the module name -local CLIENT_MODULES = { - [FFI_CLIENT] = "resty.ngx_http_ffi_client", - [LUA_RESTY_HTTP] = "resty.http", -} - local attr_schema = { type = "object", properties = { - http_client = { - type = "string", - enum = {FFI_CLIENT, LUA_RESTY_HTTP}, - default = FFI_CLIENT, - }, + http_client = http_client.client_schema, }, } local _M = {} -local http_client -local http_client_is_ffi +local client_name ---- Pick the outbound HTTP client. --- `plugin_attr.ai-proxy.http_client` names it: "ngx_http_ffi_client", the --- default, or "lua-resty-http". The first is a C client with the same object --- API as the second and around half its outbound CPU cost, and it exists only --- when the gateway runtime was built with the module. --- Resolved on first request, because local_conf is not readable while the --- module is still loading, and cached only once a client has been loaded. -local function resolve_client() - if http_client then - return http_client +--- Which client this transport should use. +-- `plugin_attr.ai-proxy.http_client` names it; the shared module owns the +-- names, validation and loading. Read on first request, because local_conf is +-- not readable while this module is still loading. +local function resolve_client_name() + if client_name then + return client_name end local local_conf = core.config.local_conf() @@ -76,72 +58,9 @@ local function resolve_client() return nil, "invalid plugin_attr.ai-proxy: " .. err end - local name = attr.http_client or FFI_CLIENT - local module_name = CLIENT_MODULES[name] + client_name = attr.http_client or http_client.DEFAULT_CLIENT - local mod - ok, mod = pcall(require, module_name) - if not ok or type(mod) ~= "table" then - core.log.error(module_name, " is not available: ", mod) - return nil, module_name .. " is not available: " .. tostring(mod) - end - - http_client = mod - http_client_is_ffi = name == FFI_CLIENT - - return http_client -end - - ---- Resolve the upstream name the way every other socket in the gateway does. --- Cosockets are patched (apisix/patch.lua) to run names through --- core.resolver, which honours dns_resolver, /etc/hosts and the search --- domains. The C client dials on its own and only sees nginx's `resolver`, --- so the name is resolved here and kept for the Host header and the SNI. -local function resolve_upstream_host(params) - local host = params.host - if not host - or core.utils.parse_ipv4(host) - or core.utils.parse_ipv6(host) - then - return true - end - - local ip, err = core.resolver.parse_domain(host) - if not ip then - return nil, "failed to parse domain: " .. (err or "unknown") - end - - params.ssl_server_name = params.ssl_server_name or host - - local headers = params.headers or {} - if not headers["Host"] and not headers["host"] then - local default_port = params.scheme == "https" and 443 or 80 - if params.port and tonumber(params.port) ~= default_port then - headers["Host"] = host .. ":" .. params.port - else - headers["Host"] = host - end - end - params.headers = headers - - params.host = ip - - return true -end - - ---- Create an HTTP client. --- The Lua half of `ngx_http_ffi_client` loads even when the C module is not --- compiled into the runtime; new() is what reports that. Either way the --- failure is returned, never worked around with the other client. -local function new_client() - local client, err = resolve_client() - if not client then - return nil, err - end - - return client.new() + return client_name end @@ -214,7 +133,12 @@ end -- @return string|nil Error message -- @return table|nil Upstream metadata on failure (for recording failed attempts) function _M.request(params, timeout) - local httpc, err = new_client() + local name, name_err = resolve_client_name() + if not name then + return nil, "failed to create http client: " .. name_err + end + + local httpc, err = http_client.new(name) if not httpc then return nil, "failed to create http client: " .. (err or "unknown") end @@ -225,8 +149,8 @@ function _M.request(params, timeout) local upstream_scheme = params.scheme or "http" local t0 = ngx_now() - if http_client_is_ffi then - local resolved, rerr = resolve_upstream_host(params) + if http_client.needs_resolve(name) then + local resolved, rerr = http_client.resolve_upstream_host(params) if not resolved then return nil, "connect: " .. rerr, { upstream_addr = upstream_addr, diff --git a/apisix/utils/http.lua b/apisix/utils/http.lua new file mode 100644 index 000000000000..c95bb6af124f --- /dev/null +++ b/apisix/utils/http.lua @@ -0,0 +1,155 @@ +-- +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +--- Outbound HTTP client selection. +-- Shared by any module that makes outbound HTTP calls, so the choice between +-- `ngx_http_ffi_client` and `lua-resty-http` is made in one place rather than +-- per plugin. The caller decides where the preference comes from (its own +-- config key) and passes the name in. + +local core = require("apisix.core") +local pcall = pcall +local require = require +local tonumber = tonumber +local tostring = tostring +local type = type + +local FFI_CLIENT = "ngx_http_ffi_client" +local LUA_RESTY_HTTP = "lua-resty-http" + +-- the client name used in configuration is not the module name +local CLIENT_MODULES = { + [FFI_CLIENT] = "resty.ngx_http_ffi_client", + [LUA_RESTY_HTTP] = "resty.http", +} + +local loaded = {} + + +local _M = { + version = 0.1, + FFI_CLIENT = FFI_CLIENT, + LUA_RESTY_HTTP = LUA_RESTY_HTTP, + DEFAULT_CLIENT = FFI_CLIENT, +} + + +--- Schema fragment for a client-name config field. +-- Callers embed this in their own attribute schema so every module validates +-- the name the same way. +_M.client_schema = { + type = "string", + enum = {FFI_CLIENT, LUA_RESTY_HTTP}, + default = FFI_CLIENT, +} + + +--- Load the module for a client name. +-- `ngx_http_ffi_client` is a C client with the same object API as +-- lua-resty-http and around half its outbound CPU cost, and it exists only +-- when the gateway runtime was built with the module. A name that cannot be +-- loaded is an error, never a silent switch to the other client. +-- Cached per name once loaded, so a failure is retried rather than remembered. +local function load_client(name) + local cached = loaded[name] + if cached then + return cached + end + + local module_name = CLIENT_MODULES[name] + if not module_name then + return nil, "unknown http client: " .. tostring(name) + end + + local ok, mod = pcall(require, module_name) + if not ok or type(mod) ~= "table" then + core.log.error(module_name, " is not available: ", mod) + return nil, module_name .. " is not available: " .. tostring(mod) + end + + loaded[name] = mod + + return mod +end + + +--- Create an HTTP client. +-- @tparam string|nil name client name; defaults to DEFAULT_CLIENT +-- @treturn table|nil the client +-- @treturn string|nil error message +function _M.new(name) + name = name or _M.DEFAULT_CLIENT + + local mod, err = load_client(name) + if not mod then + return nil, err + end + + -- The Lua half of `ngx_http_ffi_client` loads even when the C module is + -- not compiled into the runtime; new() is what reports that. + return mod.new() +end + + +--- Whether a client name needs resolve_upstream_host() before connecting. +function _M.needs_resolve(name) + return (name or _M.DEFAULT_CLIENT) == FFI_CLIENT +end + + +--- Resolve the upstream name the way every other socket in the gateway does. +-- Cosockets are patched (apisix/patch.lua) to run names through core.resolver, +-- which honours dns_resolver, /etc/hosts and the search domains. A client that +-- dials from C never touches a cosocket and only sees nginx's `resolver`, so +-- the name is resolved here and kept for the Host header and the SNI. +-- Mutates `params` in place. +-- @treturn boolean|nil true on success +-- @treturn string|nil error message +function _M.resolve_upstream_host(params) + local host = params.host + if not host + or core.utils.parse_ipv4(host) + or core.utils.parse_ipv6(host) + then + return true + end + + local ip, err = core.resolver.parse_domain(host) + if not ip then + return nil, "failed to parse domain: " .. (err or "unknown") + end + + params.ssl_server_name = params.ssl_server_name or host + + local headers = params.headers or {} + if not headers["Host"] and not headers["host"] then + local default_port = params.scheme == "https" and 443 or 80 + if params.port and tonumber(params.port) ~= default_port then + headers["Host"] = host .. ":" .. params.port + else + headers["Host"] = host + end + end + params.headers = headers + + params.host = ip + + return true +end + + +return _M diff --git a/t/sse_server_example/sse_server_example b/t/sse_server_example/sse_server_example new file mode 100755 index 0000000000000000000000000000000000000000..2c2a6e2e96bf639ce8021ed6d048c9c50beeee9d GIT binary patch literal 8376514 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 z%0DGt#xwRtom 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

wpvgv{`%C5&bFh)`7p^`^5} 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

CydN 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

x6rQYe%^OtR-;==ana%6?zWI*z_iV=Lv>u~h3h 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