Recentemente, tem havido necessidade desse aspecto no meu trabalho, o upstream é completamente dinâmico, especificado pelo cliente, há alguns erros no início e, por fim, o serviço DNS é especificado pelo resolvedor, o processo específico é o seguinte.
1. Comece a pisar no buraco
A configuração do nginx é a seguinte:
Quando envio esse tipo de pedido:
O seguinte erro foi relatado:
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 [erro] 25307#25307: *48 nenhum resolver definido para resolverwww.baidu.com, cliente: 127.0.0.1, servidor: localhost, solicitação: "GET / HTTP/1.1", host: "127.0.0.1:8001" Está claro que essa questão afirma que não especificar um resolver causa upstreamwww.baidu.com personalizados.
2. Use o Resolver para definir resolução de nomes de domínio
A configuração modificada dos nginx é a seguinte:
Agora os pedidos são 200 normais:
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. Instruções do resolver
A sintaxe do resolver é a seguinte:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Você pode configurar múltiplos serviços DNS, nginx usa polling para acessar serviços DNS, nginx armazena em cache os resultados da resolução de nomes de domínio DNS, o tempo de cache é especificado por valid, e IPv6 é usado para exibir IPv6 ligado ou desligado.
resolver_timeout é usado para especificar o tempo limite para a resolução de DNS.
|