2011-09-16 32 views
8

nginx.confにあります。nginx.confのOS環境変数を参照する方法

set $name valueで変数を設定した後、 私は、$nameよう

それを参照することができます。しかし、私はenv name_from_envで 変数OS環境をエクスポートする際に、 ようhttps://nginx.org/en/docs/ngx_core_module.html#envは言った、 をし、私はname_from_envが有効であると確信しています 定義された形式のnginxの親プロセス。

しかし、私の友人、どのようにそれを参照するには? $ name_from_envまたは$ {name_from_env}または %name_from_env%は以前に試したことがありませんでした。

+0

やgccの-Dオプションのような解決策は、変数をnginx.confに渡すだけです。 – caoxingk

答えて

-1

他のNginx変数と同様に、$ name_from_envにする必要があります。

envはhttp、server、locationブロックではなく、configのメイン部分でのみ使用できることに注意してください。

私はenvが本当にあなたが必要とするものではないと推測しています。あなたがあなたのアプリケーションに至るまでの変数を渡すためにしようとしている場合、あなたは(あなたがあなたの上流に話しているかによって異なります)proxy_paramまたはfastcgi_paramを使用する必要があります。

fastcgi_param MYVAR foo; 
+4

システム環境変数から設定ファイル、アップストリームサーバーへの移行方法は? – fideloper

+0

'fastcgi_param'、' load_module modules/ngx_http_perl_module.so; '、' perl_set ... 'の組み合わせが必要です。ただし、' perl_set'は 'location'になく' server'と同じレベルです – shadi

0

nginxのは、そのを参照するための組み込みの機能はありません。現在の環境設定の環境変数です。しかし、最も簡単な解決策は、のディレクティブngx_http_perl_moduleで、nginxのための特別なモジュールです。公式のnginxパッケージbuilds the Perl module dynamicallyですので、追加のnginx-module-perlパッケージを確実にインストールする(またはnginxのカスタムビルドを構成している場合はそれを構成します)場合があります。

の構成は次のようになります。

# Make environment variable available 
env NAME_FROM_ENV; 
# Load dynamic module (if built with Perl as dynamic module; omit if static) 
load_module modules/ngx_http_perl_module.so; 

http { 
    server { 
     location/{ 
      # Use Lua to get get and set the variable 
      perl_set $name_from_env 'sub { return $ENV{"NAME_FROM_ENV"}; }'; 
      ... 
     } 
    } 
} 

は、同じことを達成するためにLuaのを使用する方法についてもhttps://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html参照してください。 Luaサポートには第三者のモジュールが必要であり、nginxのデフォルトパッケージには同梱されていません。

関連する問題