我们在openresty的lua自定义功能开发过程中,可能会遇到需要获取系统环境变量的情况,比如:我的代理需要连接redis,这个时候把配置文件写死是不明智的,我们可以通过ENV参数在pod中传入,然后脚本读取系统变量的方式来实现,这会灵活很多。
但是有个问题,如果我在lua中直接这么写:
1
2
3
4
5
6
7
|
redisIp = os.getenv("REDISIP")
redisPort = os.getenv("REDISPORT")
redisPass = os.getenv("REDISPASS")
print("redisIp is : ", redisIp)
print("redisPort is : ", redisPort)
print("redisPass is : ", redisPass)
|
会发现只能获取到nil,那是因为 OpenResty 中的 Lua 代码运行在一个独立的 Lua 解析器中,默认情况下并不能获取到系统的环境变量。有一种比较简便的方式是我们可以在 Nginx 的 init_by_lua 中将环境变量赋值给 Lua 全局变量,这样lua就可以直接读取这个变量了。
如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
http {
init_by_lua_block {
redisIp = os.getenv("REDISIP")
redisPort = os.getenv("REDISPORT")
redisPass = os.getenv("REDISPASS")
}
server {
location /some_prefix {
# call lua
}
}
}
|