V poslední době je v mé práci potřeba tohoto aspektu, upstream je zcela dynamický, specifikovaný klientem, na začátku jsou chyby a nakonec je DNS služba specifikována přes resolver, konkrétní proces je následující.
1. Začněte šlapat na jámu
Konfigurace nginx je následující:
Když posílám takovou žádost:
Byla nahlášena následující chyba:
access.log: 127.0.0.1 - - [14. září 2017:23:37:10 +0800] "GET / HTTP/1.1" 502 179 "-" "curl/7.29.0"
error.log: 2017/09/14 23:38:31 [chyba] 25307#25307: *48 žádný resolver není definován pro vyřešeníwww.baidu.com, klient: 127.0.0.1, server: localhost, požadavek: "GET / HTTP/1.1", host: "127.0.0.1:8001" Je zřejmé, že tento problém uvádí, že nespecifikace resolveru způsobuje vlastní upstreamwww.baidu.com.
2. Použít Resolver k definování řešení doménových jmen
Modifikovaná konfigurace nginx je následující:
Nyní je to běžných 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. září 2017:23:44:01 +0800] "GET / HTTP/1.1" 200 2381 "-" "curl/7.29.0" 127.0.0.1 - - [14. září 2017:23:44:07 +0800] "GET / HTTP/1.1" 200 244182 "-" "curl/7.29.0" 3. Instrukce resolveru
Syntaxe resolveru je následující:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Můžete nastavit více DNS služeb, nginx používá polling pro přístup k DNS službám, nginx ukládá výsledky DNS doménového řešení do cache, čas cache je specifikován jako valid, a IPv6 se používá pro zobrazení IPv6 zapnutého nebo vypnutého.
resolver_timeout se používá k určení časového limitu pro DNS rozlišení.
|