当前位置: 首页 > news >正文

【动态路由】系统Web URL资源整合系列(后端技术实现)【apisix实现】

需求说明

软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资源等只能通过有限个代理地址访问),不考虑SSO。

软件质量需求:满足基本的性能要求:页面响应耗时:3s内(页面本身不走代理就慢的情况除外)

约束条件:内部web资源权限控制的原因,可申请的web资源数量有限制,成百上千的web应用地址只能通过有限个(10个以内)代理地址访问

原型界面【Axuare】

原型界面视频讲解

系统URL整合系列视频二(界面原型)【axure原型界面】_系统url整合系列视频二(界面原型)-配套文档-CSDN博客

原型设计稿下载

https://download.csdn.net/download/jjk_02027/90335900

前端代码实现【d3js】

前端代码视频讲解

系统URL整合系列视频三(前端代码实现) 【d3js版本】-CSDN博客

前端代码下载

https://download.csdn.net/download/jjk_02027/90335919

后端技术实现【apisix实现】

配置基于请求头的路由

你可以根据请求中的 HTTP 头来决定路由到哪个后端服务。例如,假设你有一个请求头 X-Service-Type,根据这个头部的值来决定转发到不同的后端服务。

首先,确保你已经安装并配置了 APISIX。

然后,你可以使用 APISIX Dashboard 或者 APISIX Admin API 来添加路由规则。以下是通过 APISIX Admin API 添加路由的示例:

curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -d '
{
    "uri": "/*",
    "hosts": {
        "example.com": "v1"
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "httpbin.org:80": 1
        }
    },
    "plugins": {
        "serverless-pre-function": {
            "functions": [
                "function() if ngx.var.http_x_service_type == 'serviceA' then return {upstream = {nodes = {'http://serviceA:80'}}} end return nil end"
            ],
            "phase": "rewrite"
        }
    }
}
'

apisix dashboard对应界面

配置基于请求参数的路由

类似地,如果你需要根据查询参数来决定路由,可以修改 serverless-pre-function 中的逻辑

curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -d '
{
    "uri": "/*",
    "hosts": {
        "example.com": "v1"
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "httpbin.org:80": 1
        }
    },
    "plugins": {
        "serverless-pre-function": {
            "functions": [
                "function() if ngx.req.get_uri_args()['paramName'] == 'value' then return {upstream = {nodes = {'http://serviceB:80'}}} end return nil end"
            ],
            "phase": "rewrite"
        }
    }
}
'

在这个例子中,如果请求包含查询参数 paramName=value,则请求会被转发到 http://serviceB:80。否则,它会按照默认的上游设置处理。

apisix dashboard对应界面

总结

通过使用 APISIX 的 serverless-pre-function 插件和 Lua 脚本,你可以非常灵活地根据请求的各种属性(如 HTTP 头、查询参数等)来决定如何路由请求到不同的后端服务。这种方法提供了极高的灵活性和动态性,非常适合需要复杂路由逻辑的场景。

附件一:apisix官方网站

Apache APISIX® -- Cloud-Native API Gateway

相关文章:

  • 【设计模式】【结构型模式】桥接模式(Bridge)
  • 案例-04.部门管理-删除
  • vueDevtools和文档整合(前端常用工具/插件)
  • Code::Blocks 创建 C 项目 二
  • 有关Java中的异常和异常处理
  • 图神经网络怎么和LLM结合
  • Docker 入门与实战:从安装到容器管理的完整指南
  • nlp|微调大语言模型初探索(1),LLaMA-Factory
  • 用deepseek学大模型05-线性回归
  • UnityRecorder导出带透明通道的视频和图片
  • Java 版本 24 性能更新:更快、更智能
  • 高效构建与配置高可用负载均衡集群:从理论到实践的全面实施
  • WordPress 角标插件:20 种渐变色彩搭配,打造专属菜单标识
  • LeetCode每日精进:142.环形链表II
  • 应用分层、三层架构和MVC架构
  • 容器运行常见数据库
  • 使用 IntersectionObserver 实现懒加载和无限滚动
  • 静态页面在安卓端可以正常显示,但是在ios打开这个页面就需要刷新才能显示全图片
  • Dify+Ollama+DeepSeek部署本地大模型+知识库搭建
  • CSS flex布局 列表单个元素点击 本行下插入详情独占一行
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 刘国中:毫不松懈巩固拓展脱贫攻坚成果,全力以赴抓好农业防灾减灾工作
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 医学统计专家童新元逝世,终年61岁
  • 五一去哪儿| 追着花期去旅行,“赏花经济”绽放文旅新活力
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理