如何在nginx.conf中使用系统的环境变量(env)?
一、需求
如果在nginx的配置中,想要使用系统中,已经存在的环境变量的值,然后在后面的配置中使用这个变量的值,在系统中的这个变量,可以是动态变化的,比如pod的名字,这个环境变量,在每次pod的启动的时候,都会会发生变化的
那么,有什么办法来实现这个需求呢?
通过使用lua模块,来实现。
或者是,使用openresty,默认就会带lua nginx 模块。
二、使用方法
在openresty中,在配置文件的开头部分,定义变量
1、在系统中存在环境变量POD_NAME
bash-5.1$ env | grep POD_NAME POD_NAME=nginx-ingress-controller-j6gjs POD_NAMESPACE=ingress-nginx bash-5.1$
2、在nginx.conf中使用这个变量
然后,在后面的配置中,使用这个变量
# Custom code snippet configured in the configuration configmap set_by_lua $pod_name 'return os.getenv("POD_NAME")';
这样,就会将这个变量引用到nginx配置中
换句话说,就是nginx的配置中,包括了这个变量和变量值
三、示例
1、在openresty中,使用PATH环境变量
2、在server中设置变量
获取系统的环境变量,并赋值给$path
3、在日志格式中应用$path变量
4、在server中开启日志
引用main日志格式
5、重启openresty,查看host.access.log日志文件
使用浏览器,访问openresty的页面
查看访问日志,发现是可以获取到系统的PATH变量的值的,已经显示在日志文件中了
但是注意:
nginx配置中使用的环境变量,不包括非系统定义的,没有jdk相关的东西
具体的原因,后面待查清楚... ...