あけましておめでとうございます、フライさんです。
ブログ機能があるのに誰も投稿してないので、せっかくならということで書いてみます 📝
🚴 TL;DR
/etc/nginx/templates/
に置くファイルの拡張子は.conf.template
にしなきゃダメ
🗃️ Template機能
(Template機能は正式な名前ではないですが便宜上こう呼びます)
もともとのnginxにはない機能ですが、Docker版のnginxには環境変数の中身を設定ファイルに展開するというイカした機能があります。
listen ${NGINX_LISTEN_PORT};
こんな風に書くと環境変数が展開されます。
こんな感じで書いた設定テンプレートファイルを/etc/nginx/templates/
ディレクトリに
XXX.template
という形式のファイル名でコンテナ内に配置すると、
コンテナが起動したときに、環境変数が展開された設定ファイルが展開され、/etc/nginx/conf.d
に
XXX
という名前で配置されます。
(/etc/nginx/templates/web-server.conf.template
→ /etc/nginx/conf.d/web-server.conf
といった具合に)
🤦 動かない
あるPJでnginxをこねこねしていたときこれを知り、 「こりゃ便利だ、使ってみよう」 となったので、
conf.template
を作成し/etc/nginx/templates/
にぶん投げ、コンテナ起動。
ぼく「さぁ、できてるかな?」
ぼく「http://localhost:12739/login
[1]、オラァッ!!!!!!!!!!!!!!!!!!!!!」
Dockerコンテナ「404 Not found
」
ぼく「ンヒィッ」
🤔 なんでよ
🔍 原因を探る
いろいろ原因を洗い出してみて、調査してみましたが…
-
展開されてない? (テンプレートファイル置く場所ミスとかファイル名ミスとか)
➡️ コンテナ内の/etc/nginx/conf.d
にconf
という名前で展開されてた
➡️ 加えてdocker
のログにも「conf.template
を展開したぜ!」というログが出てた -
設定ファイルがおかしい?
➡️/etc/nginx/nginx.conf
を上書きして環境変数を手動で展開して動かしてみたら動いた -
あえて構文ミスさせてみる
➡️ エラーログは観測できず
ということは、設定ファイルが読み込まれてないということになります。
🏄 読み込まれない原因を探る
ググったり/etc/nginx/conf.d
の中身をつんつんしたりしてもなかなか動かない中、
/etc/nginx/nginx.conf
にある記述を見つけました。
include /etc/nginx/conf.d/*.conf;
ファイル名の最後に .conf
がつくファイルが読み込まれることが見て取れますね。
そういえば、展開されたファイルの名前は conf
でしたが…んっ?
🤸 そして問題解決へ
コンテナにぶん投げるファイルの名前をconf.template
から web.conf.template
へリネーム、
コンテナへぶん投げました。結果…
nginx「あーーーー待て、web.conf
にセミコロンないやん、ダメ!起動できません!」
ぼく「ッッッッッウシッッッッッッッッッッッッッッッッッッッッッッッッッッッ!!!!!!!!!!!!!!!!!!!!!!!!!!!」
ちゃんと読み込めました。
📖 わかったこと
/etc/nginx/templates/
に置くファイル名の拡張子は.conf.template
.template
を消したときに、拡張子が.conf
になればOK。app.set.template
とかは拡張子が.set
になるのでダメです- 設定ファイルに適当な名前をつけるのはやめたほうがいい
👋 おわりに
初ブログがお粗末になってしまった、またリベンジしたいと思います。
12739
は適当に決めたポート番号です。キーボードの数字キーの上に指を添え、同時にすべてのキーを押して決めます。 ↩︎