Baru-baru ini, ada kebutuhan untuk aspek ini dalam pekerjaan saya, hulu benar-benar dinamis, ditentukan oleh klien, ada beberapa kesalahan di awal, dan akhirnya layanan DNS ditentukan melalui penyelesai, proses spesifiknya adalah sebagai berikut.
1. Mulailah menginjak lubang
Konfigurasi nginx adalah sebagai berikut:
Ketika saya mengirim permintaan semacam ini:
Kesalahan berikut dilaporkan:
access.log: 127.0.0.1 - - [14/Sep/2017:23:37:10 +0800] "DAPATKAN / HTTP/1.1" 502 179 "-" "ikal/7.29.0"
error.log: 2017/09/14 23:38:31 [kesalahan] 25307#25307: *48 tidak ada penyelesai yang ditentukan untuk diselesaikanwww.baidu.com, klien: 127.0.0.1, server: localhost, permintaan: "GET / HTTP/1.1", host: "127.0.0.1:8001" Jelas bahwa masalah ini menyatakan bahwa tidak menentukan penyelesai menyebabkan upstreamwww.baidu.com khusus.
2. Gunakan Resolver untuk menentukan resolusi nama domain
Konfigurasi nginx yang dimodifikasi adalah sebagai berikut:
Sekarang permintaannya normal 200:
req: curl "127.0.0.1:8001/" -H "upstream-host:www.baidu.com" -voa curl "127.0.0.1:8001/" -H "upstream-host:www.qq.com" -voa
access.log: 127.0.0.1 - - [14/Sep/2017:23:44:01 +0800] "DAPATKAN / HTTP/1.1" 200 2381 "-" "ikal/7.29.0" 127.0.0.1 - - [14/Sep/2017:23:44:07 +0800] "DAPATKAN / HTTP/1.1" 200 244182 "-" "curl/7.29.0" 3. Instruksi resolver
Sintaks untuk resolver adalah sebagai berikut:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Anda dapat mengonfigurasi beberapa layanan DNS, nginx akan menggunakan polling untuk mengakses layanan DNS, nginx akan menyimpan hasil resolusi nama domain DNS dalam cache, waktu cache ditentukan oleh valid, dan IPv6 digunakan untuk menampilkan IPv6 aktif atau nonaktif.
resolver_timeout digunakan untuk menentukan batas waktu resolusi DNS.
|