news 2026/5/7 11:57:33

Apisix路由配置实战:从公共API转发到消费者权限控制,一个完整微服务网关案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apisix路由配置实战:从公共API转发到消费者权限控制,一个完整微服务网关案例

Apisix路由配置实战:从公共API转发到消费者权限控制,一个完整微服务网关案例

微服务架构的流行让API网关成为系统设计中不可或缺的一环。作为开发者,我们经常需要处理这样的场景:如何安全高效地将外部请求路由到内部服务?如何在保证灵活性的同时控制访问权限?Apache APISIX作为云原生API网关,以其高性能和丰富的插件生态,成为解决这些问题的利器。

今天,我将通过一个完整的案例,带你从零开始构建一个具备基础路由转发和权限控制功能的微服务网关。这个案例会模拟真实开发中的演进过程:从最简单的公共API代理开始,逐步添加路径前缀转换,最后实现基于消费者的Basic-Auth认证。每个步骤都配有可执行的配置示例和实际测试结果,确保你能真正掌握这些概念的实际应用。

1. 基础环境准备与Apisix安装

在开始路由配置前,我们需要确保Apisix运行环境已经就绪。这里假设你已经在本地或服务器上部署了Apisix和Dashboard。如果你还没有完成这些准备工作,可以参考以下简要步骤:

# 使用Docker快速启动Apisix docker run -d --name apisix \ -p 9080:9080 -p 9443:9443 \ -v /path/to/apisix/config:/usr/local/apisix/conf \ apache/apisix:latest # 启动Dashboard docker run -d --name apisix-dashboard \ -p 9000:9000 \ -v /path/to/dashboard/conf:/usr/local/apisix-dashboard/conf \ apache/apisix-dashboard:latest

安装完成后,你可以通过http://localhost:9000访问Dashboard界面。为了后续操作方便,建议准备好以下工具:

  • Postmancurl:用于API测试
  • 文本编辑器:用于编写YAML配置
  • 终端工具:用于执行命令和查看日志

2. 基础路由配置:代理公共API

让我们从最简单的场景开始:将请求代理到一个公共API服务。这里我们使用Postman提供的测试接口http://postman-echo.com/get作为上游服务。

2.1 创建基础路由

在Apisix Dashboard中,导航到"路由"页面,点击"创建路由"。我们需要配置以下基本信息:

  • 路由名称:postman-echo-proxy
  • 路径:/echo
  • HTTP方法:GET
  • 上游服务:手动填写
    • 主机:postman-echo.com
    • 端口:80
    • 负载均衡策略:roundrobin
# 对应的YAML配置 routes: - uri: /echo name: postman-echo-proxy methods: [GET] upstream: nodes: - host: postman-echo.com port: 80 weight: 1 type: roundrobin scheme: http

2.2 测试基础路由

配置完成后,我们可以通过以下命令测试路由是否生效:

curl "http://localhost:9080/echo?foo=bar"

预期返回结果应该与直接访问http://postman-echo.com/get?foo=bar相同。这个简单的例子展示了Apisix最基本的路由功能:将匹配特定路径的请求转发到指定的上游服务。

3. 进阶路由配置:路径前缀处理

在实际项目中,我们经常需要处理更复杂的路由场景。比如,你可能希望为所有转发到某个上游的请求添加统一的前缀,或者重写请求路径。让我们扩展前面的例子,为Postman Echo API添加/api前缀。

3.1 配置路径重写

Apisix提供了proxy-rewrite插件来处理这类需求。我们需要修改路由配置:

routes: - uris: ["/api/echo/*"] name: postman-echo-prefixed methods: [GET] plugins: proxy-rewrite: regex_uri: ["^/api/echo/(.*)", "/$1"] upstream: nodes: - host: postman-echo.com port: 80 weight: 1 type: roundrobin

这个配置做了以下几件事:

  1. 匹配所有以/api/echo/开头的路径
  2. 使用正则表达式将路径重写为去掉前缀的形式
  3. 将请求转发到postman-echo.com

3.2 测试路径重写

现在,我们可以通过新路径访问API:

curl "http://localhost:9080/api/echo/get?foo=bar"

这个请求会被重写为http://postman-echo.com/get?foo=bar,然后转发到上游服务。这种配置在微服务架构中非常有用,特别是当你需要为不同服务分配不同的路径前缀时。

4. 安全配置:消费者与Basic-Auth认证

现在,我们的API网关已经能够处理基本的路由转发。接下来,我们需要考虑安全性:如何控制谁可以访问这些API?Apisix提供了多种认证方式,这里我们使用Basic-Auth作为示例。

4.1 创建消费者

消费者(Consumer)是Apisix中代表API使用者的概念。我们需要先创建一个消费者并为其配置Basic-Auth凭证:

consumers: - username: api-client plugins: basic-auth: username: client1 password: securepassword123

在Dashboard中,你可以通过以下步骤创建消费者:

  1. 导航到"消费者"页面
  2. 点击"创建消费者"
  3. 输入用户名(如api-client)
  4. 启用basic-auth插件并设置凭证

4.2 为路由添加认证

现在,我们可以修改之前创建的路由,要求请求必须提供有效的Basic-Auth凭证:

routes: - uris: ["/api/echo/*"] name: postman-echo-secured methods: [GET] plugins: basic-auth: {} consumer-restriction: whitelist: ["api-client"] proxy-rewrite: regex_uri: ["^/api/echo/(.*)", "/$1"] upstream: nodes: - host: postman-echo.com port: 80 weight: 1 type: roundrobin

这个配置添加了两个插件:

  1. basic-auth:要求请求提供有效的Basic-Auth头
  2. consumer-restriction:限制只有特定的消费者可以访问

4.3 测试认证路由

现在,未经认证的请求会被拒绝:

curl -i "http://localhost:9080/api/echo/get?foo=bar" # 返回401 Unauthorized

提供有效凭证后,请求可以正常处理:

curl -i -u "client1:securepassword123" "http://localhost:9080/api/echo/get?foo=bar"

5. 生产环境优化与扩展

前面的例子展示了Apisix的基本功能,但在生产环境中,我们还需要考虑更多因素。以下是一些值得关注的优化点:

5.1 性能调优

Apisix提供了多种性能优化选项,特别是在上游服务配置中:

upstream: nodes: - host: postman-echo.com port: 80 weight: 1 type: roundrobin timeout: connect: 3 send: 5 read: 10 keepalive_pool: size: 320 idle_timeout: 60 requests: 1000

关键参数说明

  • timeout:控制连接、发送和读取的超时时间
  • keepalive_pool:配置连接池,减少TCP连接建立的开销

5.2 监控与日志

Apisix支持多种监控和日志插件,帮助跟踪API使用情况:

plugins: prometheus: {} skywalking: sample_ratio: 1 service_name: "api-gateway" instance_name: "instance-1" endpoint_addr: "http://skywalking:12800"

5.3 限流保护

为了防止API被滥用,可以添加限流插件:

plugins: limit-count: count: 100 time_window: 60 key: remote_addr rejected_code: 429

这个配置限制每个IP地址每分钟最多100次请求。

在实际项目中,Apisix的配置可能会更加复杂,但核心概念是相同的:定义路由规则、配置上游服务、按需添加插件。通过这个完整的案例,你应该已经掌握了Apisix作为微服务网关的基本使用方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 11:56:44

YoloMouse终极指南:如何让游戏鼠标指针在Windows中变得清晰可见

YoloMouse终极指南:如何让游戏鼠标指针在Windows中变得清晰可见 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse 你是否在激烈的游戏对战中因为鼠标指针太小、颜色太淡而找不到光标位置?…

作者头像 李华
网站建设 2026/5/7 11:52:11

为AI助手集成BigDataCloud MCP Server:实现IP定位与数据验证

1. 项目概述:当AI助手学会“看地图”与“查户口” 如果你经常和Claude、Cursor或者GitHub Copilot这类AI助手打交道,有没有想过让它们变得更“接地气”?比如,你正在写一个用户注册表单,想让AI帮你验证用户输入的手机号…

作者头像 李华
网站建设 2026/5/7 11:49:46

长期使用 Taotoken 服务观察其计费模式的合理性与账单清晰度

长期使用 Taotoken 服务观察其计费模式的合理性与账单清晰度 1. 按 Token 计费的实际体验 Taotoken 的按 Token 计费模式在实际使用中展现出较高的合理性。不同于传统的按次或按时长计费,这种基于实际消耗量的计费方式能够精确反映资源使用情况。在我们的长期使用…

作者头像 李华
网站建设 2026/5/7 11:49:03

039、DMA与运动控制数据搬运

039、DMA与运动控制数据搬运 一、一个让我熬夜三天的bug 去年做六轴机械臂的实时轨迹插补,伺服周期压到500微秒。上位机通过EtherCAT发位置指令,下位机STM32H7负责解析并驱动电机。一切看起来完美——直到我发现在高速运行时,电机偶尔会“抽搐”一下,像被蚊子叮了一口。 …

作者头像 李华
网站建设 2026/5/7 11:48:43

终极指南:3步在Obsidian笔记中无缝播放B站视频的完整教程

终极指南:3步在Obsidian笔记中无缝播放B站视频的完整教程 【免费下载链接】mx-bili-plugin 项目地址: https://gitcode.com/gh_mirrors/mx/mx-bili-plugin 想在Obsidian笔记中直接观看B站视频吗?Media Extended B站插件为你提供了完美的解决方案…

作者头像 李华