web-dev-qa-db-ja.com

nginx:環境変数を使用します

次のシナリオがあります:環境変数$SOME_IPが定義されていて、nginxブロックで使用したい。 nginx documentation を参照して、次のようにnginx.confファイルでenvディレクティブを使用します。

user www-data;
worker_processes 4;
pid /run/nginx.pid;

env SOME_IP;

次に、proxy_passに変数を使用します。私は次のように試しました:

location / {
    proxy_pass http://$SOME_IP:8000;
}

しかし、次のエラーメッセージが表示されます:nginx: [emerg] unknown "some_ip" variable

19
schickling

正しい使用法は$SOME_IP_from_env、ただし、nginx.confから設定された環境変数は、サーバー、ロケーション、またはHTTPブロックでは使用できません。

Luaを含む openresty bundle を使用すると、環境変数を使用できます。

9
Ben Whaley

モジュールを介して変数にアクセスできます-LuaとPerlでそれを行うためのオプションを見つけました。

私の会社のブログでそれについて書いた:

https://web.archive.org/web/20170712003702/https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html

TL; DR:

env API_KEY;

その後:

http {
...
  server {
    location / {
      # set var using Lua
      set_by_lua $api_key 'return os.getenv("API_KEY")';

      # set var using Perl
      Perl_set $api_key 'sub { return $ENV{"API_KEY"}; }';
      ...
    }
  }
}

編集:元のブログは死んでいる、ウェイバックマシンのキャッシュへのリンクを変更

27
kikito

構成のテンプレートを作成し、envsubstをコンテナー開始に適用します。

envsubstは、公式のNGINXドッカーイメージに含まれています。 nginx構成の使用環境変数 を参照してください

Nginx構成で環境変数を使用する

すぐに使えるnginxは、ほとんどの構成ブロック内の環境変数をサポートしていません。ただし、nginxを開始する前にnginx構成を動的に生成する必要がある場合は、回避策としてenvsubstを使用できます。

Docker-compose.ymlを使用した例を次に示します。

web:
  image: nginx
  volumes:
    - ./mysite.template:/etc/nginx/conf.d/mysite.template
  ports:
    - "8080:80"
  environment:
    - NGINX_Host=foobar.com
    - NGINX_PORT=80
  command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

mysite.templateファイルには、次のような変数参照が含まれる場合があります。

listen ${NGINX_PORT};

0
Michal Foksa