需求说明
软件功能需求:反向代理功能(描述: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