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,适合中国开发者入门和实战。

相关推荐
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现一个微服务分布式事务组件
java·分布式·后端·spring·spring cloud·微服务·架构师
枫夜求索阁1 小时前
大模型文件类型揭秘:从基础到面试挑战
人工智能·面试·职场和发展·大模型
Themberfue1 小时前
RabbitMQ ②-工作模式
开发语言·分布式·后端·rabbitmq
有梦想的攻城狮2 小时前
spring中的@Inject注解详情
java·后端·spring·inject
曼岛_2 小时前
[架构之美]Spring Boot多环境5种方案实现Dev/Test/Prod环境隔离
spring boot·后端·架构
Top`2 小时前
服务预热原理
java·后端·spring
努力的小帅2 小时前
c++——二叉树进阶
开发语言·数据结构·c++·学习·算法·面试
幽络源小助理2 小时前
SpringBoot框架开发网络安全科普系统开发实现
java·spring boot·后端·spring·web安全
酷小洋3 小时前
JavaWeb基础
后端·web
一切皆有迹可循4 小时前
Spring Boot 基于 Cookie 实现单点登录:原理、实践与优化详解
java·spring boot·后端