API Gateway——KONG源码学习

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等方法。从名字可以看出各方法的含义。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容