次のシナリオがあります:環境変数$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
正しい使用法は$SOME_IP_from_env
、ただし、nginx.confから設定された環境変数は、サーバー、ロケーション、またはHTTPブロックでは使用できません。
Luaを含む openresty bundle を使用すると、環境変数を使用できます。
モジュールを介して変数にアクセスできます-LuaとPerlでそれを行うためのオプションを見つけました。
私の会社のブログでそれについて書いた:
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"}; }';
...
}
}
}
編集:元のブログは死んでいる、ウェイバックマシンのキャッシュへのリンクを変更
構成のテンプレートを作成し、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}
;