美文网首页api gateway
API Gateway——KONG源码学习

API Gateway——KONG源码学习

作者: peng66cheng | 来源:发表于2016-12-13 22:32 被阅读1873次

kong源码,本文作者只阅读一少部分。kong的学习总结 需中止一段时间,暂时发布一些儿未完成的文章。以后有机会,再进一步补充完整。

Kong基于nginx开发的,所以先看下ngnix的配置文件。作者在ubuntu安装Kong后,nginx.conf位于/usr/local/kong/目录下。由下图可知nginx.conf 包含了nginx-kong.conf(该文件跟nginx.conf位于同一目录)。


nginx-kong.conf的部分配置如下

lua_package_path '?/init.lua;./kong/?.lua;;';

lua_package_cpath ';;';

lua_shared_dict kong 4m;

lua_shared_dict cache 128m;

lua_shared_dict cache_locks 100k;

init_by_lua_block {

   require 'resty.core'

    kong = require 'kong'

    kong.init()

}

init_worker_by_lua_block {

      kong.init_worker()

}

由以上配置可知,lua和C文件的目录配置 (lua_package_path '?/init.lua;./kong/?.lua;;';lua_package_cpath ';;';)。Kong在启动nginx时,调用了kong.init()和kong.init_worker()。

以下是kong的对外server配置:

server {

server_name kong;

listen 0.0.0.0:8000;

ssl_certificate_by_lua_block {kong.ssl_certificate()}

location / {

set $upstream_host nil; set $upstream_url nil;

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()}

}

location = /kong_error_handler {

  internal;

  content_by_lua_block {   require('kong.core.error_handlers')(ngx)  }

}

}

有以上配置可知,  “location /”拦截了所有请求,并进行了以下几个阶段的出来  access_by_lua_block(访问控制)、header_filter_by_lua_block(过滤请求头)、body_filter_by_lua_block(过滤http包体)、log_by_lua_block(打印日志),他们分别调用kong的对应方法。由“kong = require 'kong'”可知,此处变量kong 定义在kong.lua中。kong源码结构如下,可见kong.lua文件。

kong.lua定义了init、init_worker、load_plugins、access、header_filter等方法。从名字可以看出各方法的含义。

后续内容待补充.....

相关文章

网友评论

  • 月明星稀陈:你好,你源码安装过kong吗
    peng66cheng:@月明星稀陈 没有通过源码安装。主要是看着官网的资料学习的。

本文标题:API Gateway——KONG源码学习

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