https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver
結論から言うとやるべきことは2つだけ。
- resolverパラメータでネームサーバのIPを指定する
- ドメインをsetを使って変数化する
nginx の proxy_pass の闇:株式会社サブスレッド 2019
set は必要。setがないと古いIPをキャッシュしたままになった nginx/1.10.1
解決策としては, httpコンテキストにおいて, resolverディレクティブを使い, 名前解決のために使うDNSを設定してやれば, TTL(Time to live, DNSから名前を引いてきた結果をキャッシュしておく時間)が切れたタイミングで名前解決をやり直す(名前を引き直す)ことが出来ます.
なお、resolverディレクティブで valid について指定すると TTL を無視して指定した頻度で名前解決をするようです。
nginxのバージョンによる?のか、nginx 1.6系、1.8系ではsetでホスト名を変数に入れないとエラーになるようです。
nginx 1.10.1では、setを使わずに指定しても設定できました。