最近开发中,使用openresty获取环境变量时遇到一些问题,在此记录一下。
默认情况下,nginx 会移除所有从父进程继承的环境变量,如果你想使用这些环境变量,需要使用该指令显示告知nginx不要移除你指定的环境变量。而且你也可以更改它们的值或创建新的环境变量。
操作方法为:
nginx.conf中插入配置
env ENV;
lua代码中调用
os.getenv("ENV")
注意:
此方法只能拿到openresty启动时候的环境变量,在运行过程中添加或修改的环境变量是不会变化的。
例如:
1.启动时~/.bashrc文件中已有
export ENV=test
2.启动openresty
3.修改~/.bashrc中变量为
export ENV=pre
并source ~/.bashrc
4.运行
os.getenv("ENV")
此时得到的结果为test。即使nginx -s reload
也不行。必须退出nginx再启动才可以。
猜测是因为reload只会重新启动worker进程,不会重启master进程,而worker进程继承了master进程的环境变量,所以reload是没用的。
参考
- [1] nginx.org