在编写程序时,我们经常会依据不同的环境使用不同的配置,之前一直以为 OpenResty 无法访问系统的环境变量,所以使用一种很 low 的方式去加载不同环境的配置。现在才发现自己还是对 Nginx 配置了解的不够全。其实 Nginx 的核心功能中就存在一个 env指令,可以实现我们的需求。下面来说明下这个 env 指令。
env
Syntax: env variable[=value];
Context: main
默认情况下,nginx 会移除所有从父进程继承的环境变量,如果你想使用这些环境变量,需要使用该指令显示告知nginx不要移除你指定的环境变量。而且你也可以更改它们的值或创建新的环境变量。
例如
env PROJECT_MODE;
# 也可以使用env PROJECT_MODE=DEV; 来覆盖父进程的环境变量
则 nginx 会保留系统的 PROJECT_MODE 环境变量,
然后在lua脚本中,我们就可以通过 lua 的os.getenv()来获取对应的环境变量了,并依据不同的环境使用不同的配置
# config.lua
local env = os.getenv("PROJECT_MODE")
local config = {}
-- 开发环境配置
if env == "DEV" then
-- 生产环境配置
elseif env == "PROD" then
end
return config