① 应用场景
+++++++++++"使用场景"+++++++++++
1) 本想在'初始化init阶段'读取配置文件中设置的自定义变量
2) 但由于在初始化阶段,配置文件'还没有'加载
3) 解决策略:将该变量加入到系统环境变量中,来实现该变量的配置
核心: 经常会依据'不同的环境'使用'不同的配置'
② env指令
Syntax: env variable[=value]; Context: main -->nginx引入的,'不是'openresty'独有'的
1) 默认情况下,nginx 会'移除所有'从父进程继承的环境变量,想使用必须'白名单'机制
2) 如果你'想使用'这些环境变量,需要使用该指令'显示告知'nginx不要移除你指定的环境变量
env JAVA_HOME;
效果:nginx 会'保留'系统的 JAVA_HOME 环境变量
3) 也可以来'覆盖'父进程的环境变量
使用env JAVA_HOME="java";
备注:可以通过这种方式'更改'它们的值或'创建新'的环境变量
4) 典型应用,'不同的环境'进行'不同的配置'
config.lua local env = os.getenv("PROJECT_MODE")
local config = {} -- 开发环境配置
if env == "DEV" then
-- 开发环境配置
elseif env == "PROD" then
-- 生产环境配置
end
return config
④ nginx.conf中使用
# 要求:必须安装'lua-nginx-module'模块
# 用在'其它'地方 -->该变量'作用域'的问题
server {
set_by_lua $curr_server_name 'return os.getenv("NGINX_SERVERNAME")';
}
警告:自从v0.9.17发行版以来,"不鼓励"使用此指令;请改用'新'的set_by_lua_block指令
注意:这个指令一次只能写出一个'nginx变量'的值;
④ lua脚本中使用
⑤ 测试结果
⑥ 其它语言方式