2017-04-14 24 views
1

NGINXがプロキシサービスとして動作していて、$ENV変数(Docker Composeファイル内)に応じてSSLキーを設定したいとします。NGINX:set_by_luaが動作しない

私はnginx.confに追加:

env ENVKEY; 

そして、configファイルで:

server { 

    resolver 10.0.0.4 valid=300s; 
    resolver_timeout 60s; 

    server_name _; 

    listen 443; 

    ssl on; 

# perl_set $envkey 'sub { return $ENV{"ENVKEY"}; }'; 
    set_by_lua $envkey 'return os.getenv("ENVKEY")'; 

    ssl_certificate /etc/nginx/ssl/jm-website-$envkey.crt; 
    ssl_certificate_key /etc/nginx/ssl/jm-website-$envkey.key; 

私もperl_setを使用しようとした - しかし、それは唯一のlocationで使用することができますが、ssl_certificate - httpまたはserverブロック。環境中の変数の存在が

nginx: [emerg] BIO_new_file("/etc/nginx/ssl/jm-website-$envkey.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/jm-website-$envkey.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)

[email protected]:/etc/nginx# echo $ENVKEY 
dev 

私はここで間違って何をやっている?私は、エラーを持っている - set_by_luaを使用して

おそらくもっと良いアプローチがありますか?

答えて

0

これは古いスレッドであることがわかります。私は後世のためにこれを掲示しています。

私はあなたと同じ問題を抱えていました。

何が起こっているかは、注文がto when the lua blocks gets executedであることです。 set_by_luaは、証明書が検証された直後に発生します。

あなたができることは、あなたが選んだレンダリングエンジン(例えばpython jinja)を使ってnginx.confをレンダリングするか、環境変数から読み込む独自のssl_certificate_by_lua_blockを書くことです。 Here is an exemple of an implementation using said blockhow Kong does itもチェックできます。

希望すると助かります:)