kong笔记——自定义 nginx模板/日志格式

kong笔记 目录导航

简述

自定义nginx模板官方文档

至于为什么要单拉出来来讲这个模块,以及这个模块的作用,目标是什么,理由如下:

  • 场景:开发者对nginx的性能调优 或者 一些自定义的nginx功能。
  • 目标:使用kong完全替代nginx代理。
  • 需求程度:
    • 注入kong已集成的nginx参数;
    • 注入nginx指令包含的文件;
    • 自定义nginx模板;
  • 准备工作:
    • 可运行的kong、konga环境

实战场景:自定义kong的日志格式

这个模块整体分为3个应用场景,分为为:

  1. kong已集成的nginx参数;
  2. nginx指令包含的文件;
  3. 自定义nginx模板。

接下来我们来一一介绍以下~~

kong已集成的nginx参数

场景:设置单个nginx命令(kong已集成的)

对于此类需求,解决比较简单,官方文档也说的比较清楚了,我这里简述一下把。

  • 对于kong已集成的nginx参数,我们怎么知道呢?

    打开kong.conf文件(此文件是由kong.conf.default文件拷贝出来的),全局搜索nginx开头的配置,看是否有你需要的配置。

  • 规则

    • 带有nginx_http_前缀的条目将被注入整个http块指令。
    • 带有nginx_proxy_前缀的条目将被注入到处理Kong的代理端口的Service块指令中。
    • 带有nginx_admin_前缀的条目将被注入到处理Kong的Admin API端口的服务器块指令中。
  • 注意事项

    • 意shell的引用规则,指定包含空格的值;
    • 某些指令依赖于特定的Nginx模块,其中一些模块可能不包含在Kong的官方版本中。
  • example

    如果在kong.conf文件中设置

    nginx_proxy_large_client_header_buffers=16 128k
    

    其意思就相当于是在nginx的Service模块中添加

    large_client_header_buffers 16 128k;
    

nginx指令包含的文件

场景:kong官方提供的模块是nginx_kong.conf,如果你想自定义接口,又不想跟nginx_kong耦合,那么就单拉出来一个独立的把

新建my_nginx.conf文件,存放至/usr/local/kong/目录下,模板:

# custom server
server {
  listen 80;
  location /rich/ {
      default_type 'text/plain';
      return 200 "success";
  }
}

新建完成之后,你得告知kong在初始化的时候给你的模板加进去

nginx_http_include = /usr/local/kong/my_nginx.conf

重新启动kong,访问http://ip/rich即可看到详情

注意,保证你的docker环境对外开放了80端口!!!!

接下来,你就可以在这里新增接口了

自定义nginx模板

在此之前,如果操作过此模块的话,我还是先说一下关于kong加载nginx这块的坑把:

/usr/local/kong目录下,你可能会发现有这么几个配置文件:nginx.conf,nginx-kong.conf,nginx-kong-stream.conf,然后你突然这么灵机一动,既然有这些文件,那我岂不是直接在上面添加我需要的参数不就行了?然后添加完之后,你发现,卧槽,不管用啊,什么鬼???

其实上述那三个文件是kong通过一个模板自动生成的文件,所以你在上面修改,然后重新启动,就又会被模板覆盖了,所以没有用,所以你得修改模板,才能生效

模板的位置:/usr/local/share/lua/5.1/kong/templates

应用场景:

  • 自定义nginx的参数,或者修改kong官方的源码参数;
  • 在已经运行的OpenResty实例中嵌入Kong,则Nginx section Permalink可以重用Kong生成的配置并将其包含在现有配置中。

官方提供的模板:
https://github.com/kong/kong/tree/master/kong/templates

直接在/usr/local/share/lua/5.1/kong/templates目录下的nginx.lua改你相对应的参数

自定义日志格式

以修改kong的nginx日志格式为例(这里用的是nginx-kong.lua,根据自身需求修改对应的模板就行):

官方默认日志:

image-20210925154003564.png

自定义日志:

首先在nginx-kong.lua中引入你的日志格式:

log_format  main  'remote_addr=[$remote_addr] http_x_forward=[$http_x_forwarded_for] time=[$time_local] request=[$request] remote_user=[$remote_user] status=[$status] byte=[$body_bytes_sent] http_referer=[$http_referer] http_user_agent=[$http_user_agent]';

对应的位置:

image-20210925154410552.png

image-20210925154545001.png

然后在 server kong 与kong admin的access_log处填写你日志的别名,

重启kong

修改日志格式之后的日志:

image-20210925154951394.png

踩坑点

  1. 因为项目业务需要,自己修改了nginx.lua文件,对于修改其他参数暂时没测出出来其他问题,但是 pid的位置尽可能的别自定义目录,因为会出问题。

    return [[
    error_log  /home/nginx/logs/error.log warn;
    pid pids/nginx.pid;
    
    # injected nginx_main_* directives
    > for _, el in ipairs(nginx_main_directives) do
    $(el.name) $(el.value);
    > end
    ...
    ]]
    

    如果修改了位置,会导致kong自身的检查机制出现问题,命令:

    kong health
    

    正常出现的结果为:

    bash-5.1# kong health
    nginx.......running
    
    Kong is healthy at /usr/local/kong
    

    修改pid位置之后则会:

    / # kong health
    nginx.......not running
    
    Error: Kong is not running at /usr/local/kong
    
      Run with --v (verbose) or --vv (debug) for more details
    / # kong health --v
    2021/09/25 08:03:31 [verbose] Kong: 2.5.0
    2021/09/25 08:03:31 [verbose] prefix in use: /usr/local/kong
    2021/09/25 08:03:31 [verbose] reading config file at /usr/local/kong/.kong_env
    2021/09/25 08:03:31 [verbose] prefix in use: /usr/local/kong
    2021/09/25 08:03:31 [info] nginx.......not running
    2021/09/25 08:03:31 [info]
    Error:
    /usr/local/share/lua/5.1/kong/cmd/health.lua:39: Kong is not running at /usr/local/kong
    stack traceback:
            [C]: in function 'assert'
            /usr/local/share/lua/5.1/kong/cmd/health.lua:39: in function 'cmd_exec'
            /usr/local/share/lua/5.1/kong/cmd/init.lua:88: in function </usr/local/share/lua/5.1/kong/cmd/init.lua:88>
            [C]: in function 'xpcall'
            /usr/local/share/lua/5.1/kong/cmd/init.lua:88: in function </usr/local/share/lua/5.1/kong/cmd/init.lua:45>
            /usr/local/bin/kong:9: in function 'file_gen'
            init_worker_by_lua:47: in function <init_worker_by_lua:45>
            [C]: in function 'xpcall'
            init_worker_by_lua:54: in function <init_worker_by_lua:52>
    

    但是业务线的使用是正常的,很奇怪…就只是这个命令有问题(暂时只发现了这些…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值