Kong自定义配置Nginx
介绍
Kong是基于Nginx实现代理转发.官方的 nginx.conf
配置文件过于简单.如果需要优化nginx的性能,就需要修改默认的nginx配置文件,或者重新自定义一个nginx配置文件.
具体方法可以参考官方文档: https://docs.konghq.com/2.2.x/configuration/#environment-variables
下面介绍2种方式自定义nginx的配置
通过环境变量注入
Kong服务启动时会每次都新建一个新的nginx配置文件.可以通过将nginx指令注入到 kong.conf
配置文件中从而配置到这个新的nginx配置文件
注入Nginx单个指令
注入到Kong的环境变量一般包含下面2种前缀.前缀名不同代表注入的nginx指令作用在不同的作用域下.Kong会将环境变量的前缀去掉,然后将环境变量的后面部分注入到nginx.
nginx_http_
该前缀环境变量会被注入到Nginx的http代码块nginx_proxy_
该前缀会被注入到nginx的server代码块
例如.如果注入以下环境变量到 kong.conf
配置文件:
1 | nginx_proxy_large_client_header_buffers=16 128k |
Kong会将以下环境变量注入到Nginx配置文件的代理 server
块中
1 | large_client_header_buffers 16 128k; |
下面的环境变量,会被注入到nginx的http块中
1 | export KONG_NGINX_HTTP_OUTPUT_BUFFERS="4 64k" |
还有一种前缀
Nginx_admin_
这个作用在kong的admin api,所以用的较少
注入Nginx代码块
对于一些复杂的配置场景,比如需要将整个server代码块添加到Nginx配置文件.可以使用上面的环境变量注入的方式,注入一个 include
指令到Nginx配置文件.
例如下面这个nginx的server代码块文件.假如该文件名为 my-server.conf
1 | # custom server |
可以通过下面的方式添加到 kong.conf
配置文件
1 | nginx_http_include = /path/to/your/my-server.conf |
或者通过环境变量方式注入
1 | export KONG_NGINX_HTTP_INCLUDE="/path/to/your/my-server.conf" |
这样当Kong启动后,server代码块会被添加到Nginx的配置文件.
这里也可以使用相对路径来注入一个server代码块的配置文件,但是配置文件需要在
kong.conf
配置文件的prefix路径之下.或者kong启动时候通过-p
参数自定义的prefix路径之下
自定义Nginx模板
kong在启动的时候会根据 /usr/local/share/lua/5.1/kong/templates/nginx.lua
和 /usr/local/share/lua/5.1/kong/templates/nginx_kong.lua
这2个lua模板来自动生成nginx的配置文件.当Kong启动后会自动在prefix路径下生成 nginx.conf
和 nginx-kong.conf
.前者是Nginx的主配置文件,然后通过include方式引入了 nginx_kong.conf
当kong启动后,会产生下面2个文件
1 | /usr/local/kong |
在 https://github.com/kong/kong/tree/master/kong/templates下也存放了kong的默认模板文件.
所以在 usr/local/kong
目录下直接修改 Nginx.conf
配置文件无法永久生效.当kong重启时,配置文件会被默认的Lua目标所覆盖和替代
如果一定要自定义nginx配置文件.可以自定义nginx的模板文件来替代 Nginx.lua
.然后在该模板文件里引入 nginx-kong.conf
实现步骤
- 拷贝
nginx.conf
配置文件为nginx.conf.template
1 | cp /usr/local/kong/nginx.conf nginx.conf.template |
- 自定义配置
nginx.conf.template
.例如下面是我的配置文件内容
1 | pid pids/nginx.pid; |
注意该配置文件内的指令不能和
nginx-kong.conf
配置文件有同名或者冲突.否则kong无法启动
- 重新启动Kong.使用下面的参数指定自定义的Nginx模板文件
1 | kong start -c /etc/kong/kong.conf --nginx-conf nginx.conf.template |
docker运行kong
如果是docker方式运行.可以使用 Dockerfile
自定义kong镜像
以下是Dockerfile文件内容
1 | FROM kong:2.2.0 |
编译docker镜像
1 | docker build -t dwd-kong:2.2.0 . |
重启运行docker.但是要先在kong容器运行 kong migrations up
和 kong migrations finish
命令.所以 docker-compose.yml
配置文件内容如下
1 | kong: |
启动容器后.可以查看配置文件是否生效:
1 | [work@docker docker-compose]$docker exec kong cat /usr/local/kong/nginx.conf |
如此,便实现了自定义kong的nginx配置文件,这在大并发场景中可能需要优化nginx的转发性能.如果是小规模场景中,可以使用Kong的默认的Nginx配置文件即可.