Solusi 1:
Jawaban yang diterima tidak bekerja untuk saya di nginx/1.4.2.
Menggunakan variabel di proxy_pass
memaksa resolusi ulang nama DNS karena NGINX memperlakukan variabel secara berbeda dengan konfigurasi statis. Dari NGINX proxy_pass
dokumentasi:
Nilai parameter dapat berisi variabel. Dalam hal ini, jika sebuah alamat ditentukan sebagai nama domain, nama tersebut dicari di antara grup server yang dijelaskan, dan, jika tidak ditemukan, ditentukan menggunakan penyelesai.
Misalnya:
server {
...
resolver 127.0.0.1;
set $backend "http://dynamic.example.com:80";
proxy_pass $backend;
...
}
Catatan:Penyelesai (yaitu server nama yang akan digunakan) HARUS tersedia dan dikonfigurasi agar ini berfungsi (dan entri di dalam /etc/hosts
file tidak akan digunakan dalam pencarian).
Secara default, versi 1.1.9 atau versi yang lebih baru dari cache NGINX menjawab menggunakan nilai TTL dari respons dan valid
opsional parameter memungkinkan waktu cache diganti:
resolver 127.0.0.1 [::1]:5353 valid=30s;
Sebelum versi 1.1.9, penyetelan waktu caching tidak dimungkinkan, dan nginx selalu meng-cache jawaban selama 5 menit. .
Solusi 2:
Ada informasi berharga di komentar gansbrest dan jawaban ohaal.
Tapi menurut saya penting untuk menyebutkan artikel resmi nginx ini, yang diposting pada tahun 2016, dengan jelas menjelaskan perilaku nginx tentang masalah ini dan kemungkinan solusinya:https://www.nginx.com/blog/dns-service-discovery-nginx-plus //P>
Kami memang harus "Menyetel Nama Domain dalam Variabel" dan menggunakan direktif penyelesai.
namun, menggunakan variabel mengubah perilaku penulisan ulang. Anda mungkin harus menggunakan direktif penulisan ulang, tergantung pada lokasi dan penyiapan proxy_pass Anda.
PS:ingin memposting komentar tetapi belum cukup poin...
Solusi 3:
Itu pertanyaan yang menarik dan AFAIK itu tidak akan bekerja dengan baik. Anda dapat mencoba menggunakan modul upstream dan menggunakan arahan untuk failover untuk melihat apakah ini berfungsi sebagai peretasan.
Suntingan 2018:banyak hal berubah. Periksa jawabannya oleh @ohaal untuk mendapatkan informasi sebenarnya tentang ini.
Solusi 4:
jawaban ohaal membawa sebagian besar dari kita ke sana, tetapi ada kasus di mana penyelesai DNS tidak hidup di 127.0.0.1 (mis. saat Anda berada di lingkungan kemas khusus)
Dalam hal ini, Anda mungkin ingin mengubah conf nginx menjadi resolver ${DNS_SERVER};
. Lalu, sebelum Anda memulai nginx, jalankan
export DNS_SERVER=$(cat /etc/resolv.conf |grep -i '^nameserver'|head -n1|cut -d ' ' -f2)
envsubst '${DNS_SERVER}' < your_nginx.conf.template > your_nginx.conf
Perhatikan, bahwa Anda memerlukan gettext
paket diinstal, karena menyediakan envsubst
perintah.