Son zamanlarda işimde bu yöne ihtiyaç duyuldu, upstream tamamen dinamik, istemci tarafından belirleniyor, başlangıçta bazı hatalar var ve son olarak DNS servisi çözümleyici aracılığıyla belirleniyor, spesifik süreç şöyle.
1. Çukura adım atmaya başla
nginx'in konfigürasyonu şöyledir:
Bu tür bir isteği gönderdiğimde:
Aşağıdaki hata bildirildi:
access.log: 127.0.0.1 - - [14/Sep/2017:23:37:10 +0800] "GET / HTTP/1.1" 502 179 "-" "curl/7.29.0"
error.log: 2017/09/14 23:38:31 [hata] 25307#25307: *48 çözümleyici çözüm tanımlamıyorwww.baidu.com, istemci: 127.0.0.1, sunucu: localhost, istek: "GET / HTTP/1.1", host: "127.0.0.1:8001" Bu sorunun bir çözümcünün belirtilmemesinin özel upstreamwww.baidu.com yarattığını belirttiği açıktır.
2. Alan adı çözümlemesini tanımlamak için Resolver kullanın
Değiştirilmiş nginx konfigürasyonu şöyledir:
Şimdi istekler 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] "GET / HTTP/1.1" 200 2381 "-" "curl/7.29.0" 127.0.0.1 - - [14/Sep/2017:23:44:07 +0800] "GET / HTTP/1.1" 200 244182 "-" "curl/7.29.0" 3. Çözümleyici talimatları
Çözümleyicinin sözdizimi şöyledir:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Birden fazla DNS servisini yapılandırabilirsiniz, nginx DNS servislerine erişmek için anket kullanır, nginx DNS alan adı çözümleme sonuçlarını önbelleker, önbellek süresi geçerli ile belirlenir ve IPv6 ile IPv6 açık veya kapalı görüntülenir.
resolver_timeout, DNS çözümleme için zaman aşımını belirtmek için kullanılır.
|