Recentemente, questo aspetto è stato necessario nel mio lavoro: l'upstream è completamente dinamico, specificato dal client, ci sono alcuni errori all'inizio, e infine il servizio DNS viene specificato tramite il risolver, il processo specifico è il seguente.
1. Inizia a mettere piede nella fossa
La configurazione di nginx è la seguente:
Quando invio questo tipo di richiesta:
È stato segnalato il seguente errore:
access.log: 127.0.0.1 - - [14/Set 2017:23:37:10 +0800] "GET / HTTP/1.1" 502 179 "-" "curl/7.29.0"
error.log: 2017/09/14 23:38:31 [errore] 25307#25307: *48 nessun risolvere definitowww.baidu.com, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "127.0.0.1:8001" È chiaro che questo problema afferma che non specificare un resolver causa upstreamwww.baidu.com personalizzate.
2. Utilizzare Resolver per definire la risoluzione dei nomi di dominio
La configurazione modificata di nginx è la seguente:
Ora le richieste sono normali 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/Set 2017:23:44:01 +0800] "GET / HTTP/1.1" 200 2381 "-" "curl/7.29.0" 127.0.0.1 - - [14/Set 2017:23:44:07 +0800] "GET / HTTP/1.1" 200 244182 "-" "curl/7.29.0" 3. Istruzioni del Resolver
La sintassi del resolver è la seguente:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Puoi configurare più servizi DNS, nginx userà polling per accedere ai servizi DNS, nginx memorizzerà in cache i risultati della risoluzione del nome di dominio DNS, il tempo di cache è specificato da valid, e IPv6 viene usato per visualizzare IPv6 attivato o disattivato.
resolver_timeout viene utilizzato per specificare il timeout per la risoluzione DNS.
|