dns de geolocalização Heroku e Amazon Route 53

2

Eu tenho um aplicativo em execução no Heroku em duas regiões, eu e nós. Vamos dizer: myapp-eu.herokuapp.com e myapp-us.herokuapp.com.

Eu gostaria de configurar um dns de geolocalização que direcione os usuários para a região mais próxima ao visitar nosso site em www.myapp.com.

O que eu fiz até agora é usar o Amazon Route 53 para configurar o registro 2 CNAME:

  • www.myapp.com CNAME myapp-eu.herokuapp.com (quando o geo é eu)
  • www.myapp.com CNAME myapp-us.herokuapp.com (quando a geo for nós)

Mas o Heroku não aceita o mesmo CNAME para ser usado em dois aplicativos diferentes.

Alguém configurou com sucesso um geo dns que funciona com o Heroku, por favor?

Obrigado!

    
por passkey1510 28.02.2016 / 01:11

1 resposta

0

Eu ia postar a solução com o HAProxy, o que eu acho que dei como uma resposta aqui antes (embora uma pesquisa não tenha aparecido).

Isso (ou algo semelhante, você também pode usar verniz ou nginx) será a única abordagem viável, dada a limitação do namespace global do aplicativo Heroku, já que nenhum serviço DNS pode fazer o que você está querendo - as reescritas do cabeçalho do host não podem ser realizado com configuração de DNS sozinho. O pedido terá que passar por um sistema de algum tipo que possa reescrever o cabeçalho em vôo.

No entanto, você só precisaria de um proxy, não dois. Aqui está o porquê:

Se o nome do host for myapp.example.com , configure a implementação US Heroku para simplesmente esperar esse nome de host.

Em seguida, não configure a implantação da UE para esperar um nome de host personalizado; você estará usando o nome de host não vaidade myapp-eu.herokuapp.com .

O Route 53 seria configurado para retornar o terminal Heroku como a resposta para as consultas dos EUA e o ponto de extremidade do proxy para solicitações da UE. O proxy iria reescrever o cabeçalho do host para myapp-eu.herokuapp.com e enviar a solicitação para o terminal Heroku EU, mas as solicitações dos EUA iriam diretamente para o terminal Heroku US, que esperaria o nome do host que o cliente já está usando.

Você também pode evitar o proxy e usar o CloudFront como proxy. Observe que esta solução só funciona com 2 destinos - EUA e UE neste caso - devido às restrições de configuração globais do CloudFront (somente 1 distribuição do CloudFront pode ser configurada para um determinado nome de host de entrada) ... mas para essa solução, 1 é tudo que precisamos. Um destino (US) usa uma conexão direta e não requer nenhuma reescrita, enquanto o outro destino (EU) faz proxy através do CloudFront e obtém uma reescrita.

Crie uma distribuição do CloudFront. Configure-o para esperar pedidos para myapp.example.com . Configure-o para usar o hostname de terminal da UE Heroku não vaidade, myapp-eu.herokuapp.com como seu servidor de origem personalizado e não configure-o para colocar na lista de permissões o cabeçalho Host da solicitação original. Coloque na lista quaisquer outros cabeçalhos que você precise. Opcionalmente, desative o cache. Em seguida, o CloudFront reescreverá o Host: do cabeçalho de myapp.example.com para o nome de host configurado do servidor Origin, que seria o ponto final da UE.

Então, como antes, configure o Route 53 para retornar o endpoint US Heroku CNAME para solicitações de locais que devem ir para o endpoint dos EUA, mas para retornar o% CNFER% CNAME para solicitações de locais que devem ir para o endpoint da UE .

De qualquer forma, você pagará pelo transporte do tráfego enviado para o terminal que passa pelo proxy ou pelo CloudFront; portanto, talvez você queira usá-lo para o terminal que espera ver a menor quantidade de tráfego. .. então você pode querer transpor a UE e os EUA nos exemplos acima, que arbitrariamente assumem que EUA veriam mais tráfego, por isso ele é encaminhado diretamente.

Nenhuma dessas soluções deve adicionar um tempo significativo de ida e volta às solicitações. Se você seguir a rota do proxy, é provável que você descubra que uma máquina muito pequena, como a t2.micro ou a t2.nano, pode manipular mais tráfego do que o esperado, já que o processamento é mínimo.

    
por 29.02.2016 / 18:29