In letzter Zeit besteht in meiner Arbeit ein Bedarf an diesem Aspekt: Upstream ist komplett dynamisch, vom Client angegeben, es gibt einige Fehler am Anfang, und schließlich wird der DNS-Dienst über den Resolver angegeben, der spezifische Prozess ist wie folgt.
1. Fang an, in die Grube zu treten
Die Konfiguration von nginx ist wie folgt:
Wenn ich diese Art von Anfrage schicke:
Folgender Fehler wurde gemeldet:
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 [Fehler] 25307#25307: *48 kein Resolver definiert zum Auflösenwww.baidu.com, Client: 127.0.0.1, Server: localhost, Anfrage: "GET / HTTP/1.1", Host: "127.0.0.1:8001" Es ist klar, dass dieses Problem besagt, dass das Fehlen eines Resolvers benutzerdefinierte upstreamwww.baidu.com verursacht.
2. Verwenden Sie Resolver zur Definition der Domain-Namen-Resolution
Die modifizierte nginx-Konfiguration ist wie folgt:
Jetzt sind die Anfragen 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. Resolver-Anweisungen
Die Syntax des Resolvers ist wie folgt:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Man kann mehrere DNS-Dienste konfigurieren: nginx nutzt Abfragen, um auf DNS-Dienste zuzugreifen, nginx speichert die Ergebnisse der DNS-Domain-Namen-Auflösung, die Cache-Zeit ist als gültig angegeben, und IPv6 wird verwendet, um IPv6 ein- oder ausgeschaltet anzuzeigen.
resolver_timeout wird verwendet, um das Timeout für die DNS-Auflösung festzulegen.
|