最近開發中,使用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