Apisix工作流程
是的,你的理解基本正确:当请求到达APISIX时,它会先根据请求的URI、Host、请求方法、 headers等信息匹配最合适的路由,然后执行路由关联的插件逻辑,最后转发到路由配置的上游服务。下面详细讲解APISIX处理请求的全链路及可能的情况。
一、请求全链路流程
APISIX处理请求的完整链路可分为7个核心阶段,每个阶段都有明确的职责和可能的分支逻辑:
1. 接收请求
- 触发条件:客户端(如浏览器、curl、应用程序)通过APISIX的监听端口(默认9080,HTTPS默认9443)发送HTTP/HTTPS请求。
- 核心操作:
- 解析请求的基本信息:HTTP方法(GET/POST等)、URI(如
/ip
)、协议版本(HTTP/1.1/2)、请求头(Headers,如Host、Cookie、Authorization)、请求体(Body)等。 - 记录请求的源IP、端口、到达时间等元数据。
- 解析请求的基本信息:HTTP方法(GET/POST等)、URI(如
- 可能的异常:
- 请求格式错误(如无效的HTTP协议):APISIX直接返回
400 Bad Request
。 - 连接超时:客户端与APISIX的TCP连接未在超时时间内完成请求发送,APISIX主动断开连接。
- 请求格式错误(如无效的HTTP协议):APISIX直接返回
2. 路由匹配(核心阶段)
- 触发条件:请求解析完成后,APISIX进入路由匹配阶段,目的是找到与当前请求匹配的路由配置。
- 核心逻辑:
- 遍历所有启用状态(status: 1) 的路由,根据路由配置的匹配规则(
uri
、host
、methods
、params
、headers
等)进行匹配。 - 匹配优先级:精确匹配(如
uri: "/ip"
) > 前缀匹配(如uri: "/api/*"
) > 正则匹配(如uri: "/user/(\d+)"
);若多个路由匹配,按路由的
- 遍历所有启用状态(status: 1) 的路由,根据路由配置的匹配规则(