Apache APISIX入门指南:快速理解与实战示例

Apache APISIX 是一个开源的云原生 API 网关,属于 Apache 软件基金会项目。它基于 NGINX 和 LuaJIT 技术,具备高性能、动态配置、实时响应和良好扩展性,主要用于管理和转发大量 API 请求,广泛应用于微服务架构中。

一、APISIX的基础知识点

1. 什么是 API 网关?

API 网关是位于客户端和后端服务之间的中间层,负责接收所有外部请求,统一管理、路由、转发请求到具体的服务,并提供安全、流量控制、监控等功能。

2. APISIX 的核心组成

组件 作用说明
路由(Route) 定义请求匹配规则(如路径、方法),决定请求如何处理和转发。
上游(Upstream) 抽象后端服务节点,支持负载均衡,将请求分发到多个服务实例。
插件(Plugin) 对请求进行增强处理,如限流、认证、日志、缓存、安全防护等。
配置存储(etcd) 保存 APISIX 配置,实现配置的动态同步和热更新。

3. APISIX 的主要特点

  • 高性能:单核 QPS(每秒请求数)可达 23000 以上,延迟极低。
  • 动态配置:支持热加载配置,无需重启服务即可生效。
  • 丰富插件:内置限流、认证、缓存、日志、监控等多种插件,支持自定义插件开发。
  • 多语言支持:插件支持 Lua、Golang、Java、Python 等语言。
  • 云原生友好:支持 Kubernetes Ingress Controller,适合云环境部署。
  • 安全防护:支持身份认证、IP 黑白名单、防火墙等安全功能。
  • 灰度发布:支持蓝绿部署、金丝雀发布、A/B 测试,方便业务平滑升级。

二、APISIX 常见使用场景

  • 大规模微服务流量管理:处理海量 API 请求,支持高可用和动态路由。
  • 流量控制与调度:限流、熔断、重试,保障系统稳定。
  • 安全防护:防止恶意攻击,保护后端服务。
  • 灰度发布与测试:支持业务平滑升级,减少风险。
  • 云原生集成:作为 Kubernetes Ingress Controller 或服务网格组件。

三、快速上手:本地安装与简单路由配置示例

1. 安装前准备

  • 安装 Docker(用于运行 APISIX 和 etcd 容器)

2. 一键快速启动 APISIX

打开终端,执行以下命令:

bash 复制代码
curl -sL https://run.api7.ai/apisix/quickstart | sh

成功后会显示:

text 复制代码
✔ APISIX is ready!

3. 验证 APISIX 是否正常运行

执行:

bash 复制代码
curl "http://127.0.0.1:9080" --head | grep Server

如果返回类似:

text 复制代码
Server: APISIX/3.x.x

说明 APISIX 已启动成功。

4. 创建一个简单的路由,将请求转发到 httpbin.org

使用下面的命令创建路由:

bash 复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PUT -d '
{
  "uri": "/ip",
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:80": 1
    }
  }
}'
  • 这里 "uri": "/ip" 表示匹配访问路径为 /ip 的请求。
  • "upstream" 指定请求转发到 httpbin.org

成功时返回 HTTP 201 Created。

5. 测试路由是否生效

执行:

bash 复制代码
curl "http://127.0.0.1:9080/ip"

你会看到类似如下的 JSON 响应,显示你的公网 IP:

json 复制代码
{
  "origin": "你的公网IP"
}

四、进阶示例:配置限流和认证插件

1. 限流插件示例

给上面创建的路由添加限流插件,限制每分钟最多 10 次请求:

bash 复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PATCH -d '
{
  "plugins": {
    "limit-count": {
      "count": 10,
      "time_window": 60,
      "rejected_code": 503,
      "key": "remote_addr",
      "policy": "local"
    }
  }
}'
  • count: 最大请求数
  • time_window: 时间窗口(秒)
  • key: 按客户端 IP 限流
  • rejected_code: 超限返回的 HTTP 状态码

2. JWT 认证插件示例

为路由开启 JWT 认证:

bash 复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PATCH -d '
{
  "plugins": {
    "jwt-auth": {}
  }
}'

然后你需要在 APISIX 中创建 JWT 消费者和密钥,详细操作可以参考官方文档。

五、APISIX 插件开发示例(Lua)

下面是一个简单的自定义插件示例,给响应添加自定义 HTTP 头:

lua 复制代码
local plugin = {
    name = "add-header",
    version = "0.1",
    priority = 1000,
    schema = {
        type = "object",
        properties = {
            header_name = { type = "string" },
            header_value = { type = "string" }
        },
        required = { "header_name", "header_value" }
    }
}

function plugin:header_filter(conf)
    ngx.header[conf.header_name] = conf.header_value
end

return plugin

将此插件注册到 APISIX 后,可以在路由中配置:

json 复制代码
"plugins": {
  "add-header": {
    "header_name": "X-Custom-Header",
    "header_value": "HelloAPISIX"
  }
}

访问该路由时,响应头中会带有 X-Custom-Header: HelloAPISIX

六、总结

Apache APISIX 是一款功能强大、性能优异的云原生 API 网关,适合各种规模的业务场景。它支持动态路由、负载均衡、丰富插件、安全防护和灰度发布等功能。通过简单的安装和配置,开发者可以快速搭建起高效的 API 管理平台。

以上内容结合了基础概念、安装步骤、配置示例和插件开发,帮助你快速理解和使用 Apache APISIX,适合中国开发者入门和实战。

相关推荐
岫珩5 分钟前
Ubuntu系统关闭防火墙的正确方式
后端
心之语歌9 分钟前
Java高效压缩技巧:ZipOutputStream详解
java·后端
不死的精灵1 小时前
【Java21】在spring boot中使用ScopedValue
java·spring boot·后端
前端小巷子1 小时前
Web开发中的文件上传
前端·javascript·面试
M1A12 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
后端·网络协议·tcp/ip
逸风尊者2 小时前
开发易掌握的知识:GeoHash查找附近空闲车辆
java·后端
程序猿阿越3 小时前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序员爱钓鱼3 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
Jiude3 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
仰望星空@脚踏实地3 小时前
Spring Boot Web 服务单元测试设计指南
spring boot·后端·单元测试