如何在nginx.conf中使用系统的环境变量(env)?

发布时间 2023-06-07 10:37:39作者: 天恒大通

一、需求

 

如果在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相关的东西

 

具体的原因,后面待查清楚... ...