Ostatnio pojawiła się potrzeba tego aspektu w mojej pracy, upstream jest całkowicie dynamiczny, określany przez klienta, na początku pojawiają się błędy, a na końcu usługa DNS jest określana przez resolver, a konkretny proces wygląda następująco.
1. Zacznij stąpać na dołek
Konfiguracja nginx wygląda następująco:
Kiedy wysyłam takie prośby:
Zgłoszono następujący błąd:
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 [błąd] 25307#25307: *48 brak zdefiniowanego resolvera do rozwiązaniawww.baidu.com, klient: 127.0.0.1, serwer: localhost, żądanie: "GET / HTTP/1.1", host: "127.0.0.1:8001" Jest jasne, że w tej kwestii jest napisane, iż nieokreślenie resolvera powoduje upstreamwww.baidu.com niestandardowe.
2. Użyj Resolvera do definiowania rozwiązywania nazw domen
Zmodyfikowana konfiguracja nginx wygląda następująco:
Teraz liczba próśb wynosi normalnie 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. Instrukcje resolvera
Składnia resolvera wygląda następująco:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Możesz skonfigurować wiele usług DNS, nginx będzie używał pollingu do dostępu do usług DNS, nginx będzie buforował wyniki rozwiązywania nazw domen DNS, czas pamięci podręcznej jest określony przez valid, a IPv6 służy do wyświetlania IPv6 włączonego lub wyłączonego.
resolver_timeout służy do określenia limitu czasu dla rozdzielczości DNS.
|