美文网首页
流量网关Kong定制化多维度(URL、Cookie、Header

流量网关Kong定制化多维度(URL、Cookie、Header

作者: _男猪脚 | 来源:发表于2021-08-24 19:52 被阅读0次
  1. Kong官方源码GitHub: https://github.com/Kong/kong

  2. 定制开发需求
    a. 根据匹配的URL做转发。
    b. 根据匹配的Cookie做转发。
    c. 根据匹配的Header做转发。

  3. Kong流程分析
    根据nginx配置文件最能体现kong的插件加载过程,来分析kong的执行流程

server {
   server_name kong;
   rewrite_by_lua_block {
      Kong.rewrite()
   }
   access_by_lua_block {
      Kong.access()
   }
   header_filter_by_lua_block {
     Kong.header_filter()
   }
   body_filter_by_lua_block {
     Kong.body_filter()
   }
   log_by_lua_block {
     Kong.log()
   }
}

1>. 重点关注Kong.rewrite()和Kong.access()两个方法
a). rewrite方法:从客户端接收作为重写阶段处理程序的每个请求执行。在这个阶段,无论是API还是消费者都没有被识别,因此这个处理器只在插件被配置为全局插件时执行。
b). access方法:为客户的每一个请求而执行,并在它被代理到上游服务之前执行。

2>. 通过源码得知,rewrite()阶段操作的是ngx.var.uri变量,在请求处理过程中可以更改,例如执行内部重定向后,而access()阶段kong在路由匹配的时候使用的是ngx.var.request_uri原始uri,并且不可变。
参考router.lua文件:


image.png

3>. 在匹配路由前,重写ngx.var.request_uri,以便达到根据请求URL或Cookie或Header中的配置值做路由转发。

  1. 定制开发
    修改kong/router.lua脚本,根据分发路由规则重写var.request_uri(图二红框代码)。
    下图是修改前的源代码:


    image.png

下图是改造后的代码:


image.png

相关文章

网友评论

      本文标题:流量网关Kong定制化多维度(URL、Cookie、Header

      本文链接:https://www.haomeiwen.com/subject/yxqjiltx.html