Recientemente, ha habido una necesidad de este aspecto en mi trabajo, el upstream es completamente dinámico, especificado por el cliente, hay algunos errores al principio y, finalmente, el servicio DNS se especifica a través del resolver, el proceso específico es el siguiente.
1. Empieza a pisar el pozo
La configuración de nginx es la siguiente:
Cuando envío este tipo de solicitud:
Se reportó el siguiente error:
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 [error] 25307#25307: *48 sin resolver definido para resolverwww.baidu.com, cliente: 127.0.0.1, servidor: localhost, solicitud: "GET / HTTP/1.1", host: "127.0.0.1:8001" Está claro que este problema indica que no especificar un resolver causa upstreamwww.baidu.com personalizados.
2. Utilizar Resolver para definir la resolución de nombres de dominio
La configuración modificada de nginx es la siguiente:
Ahora las solicitudes son normales 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. Instrucciones del resolver
La sintaxis del resolver es la siguiente:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Puedes configurar varios servicios DNS: nginx usará sondeos para acceder a los servicios DNS, nginx almacenará en caché los resultados de la resolución de nombres de dominio DNS, el tiempo de caché se especifica por valid y IPv6 se usa para mostrar IPv6 encendido o desactivado.
resolver_timeout se utiliza para especificar el tiempo de espera para la resolución DNS.
|