Como configuro o DNS para um domínio apex (sem www) apontando para um aplicativo Heroku?

97

Já adicionei um domínio personalizado ao meu aplicativo Heroku e funciona com ele www.domain.com.

Preciso saber como configurar o domínio sem wwwresolver para o aplicativo também.

Aqui estão minhas configurações DNS atuais:

$TTL 86400
@   IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
    2013041500   ; serial
    14400        ; refresh
    1800         ; retry
    604800       ; expire
    86400 )      ; minimum

@                        IN NS      robotns3.second-ns.com.
@                        IN NS      robotns2.second-ns.de.
@                        IN NS      ns1.first-ns.de.

@                        IN A       88.198.38.XXX
localhost                IN A       127.0.0.1
mail                     IN A       88.198.38.XXX
ftp                      IN CNAME   www
imap                     IN CNAME   www
loopback                 IN CNAME   localhost
pop                      IN CNAME   www
relay                    IN CNAME   www
smtp                     IN CNAME   www
www                      IN CNAME   appname.herokuapp.com.
@                        IN MX 10   mail

Quais são as configurações corretas a serem usadas para que example.come www.example.comapontem corretamente para o meu aplicativo Heroku?

mrks
fonte
btw parece que suas configurações de ftp / pop / smtp estão todas erradas, já que está apontando para www, que aponta para heroku, que não faz ftp / pop / smtp.
kch de
Outra solução stackoverflow.com/a/11494197/176877
Chris Moschini

Respostas:

145

(Observação: os domínios raiz, base e apex são todos a mesma coisa. Usando de forma intercambiável para google-foo.)

Tradicionalmente, para apontar seu domínio apex, você usaria um registro A apontando para o IP do seu servidor. Esta solução não é escalável e não é viável para uma plataforma de nuvem como o Heroku, onde back-ends múltiplos e em constante mudança são responsáveis ​​por responder às solicitações.

Para subdomínios (como www.example.com), você pode usar registros CNAME apontando para your-app-name.herokuapp.com. A partir daí, o Heroku gerencia os registros A dinâmicos your-app-name.herokuapp.compara que eles estejam sempre atualizados. Infelizmente, a especificação DNS não permite registros CNAME no apex da zona (o domínio base). (Por exemplo, os registros MX quebrariam, pois o CNAME seria seguido até seu destino primeiro.)

De volta aos domínios raiz, a solução simples e genérica é não usá-los. Como medida alternativa, alguns provedores de DNS oferecem a configuração de um redirecionamento HTTP para você. Nesse caso, configure-o para que example.comseja um redirecionamento HTTP para www.example.com.

Alguns provedores de DNS apresentaram soluções personalizadas que permitem um comportamento semelhante ao do CNAME no ápice da zona. Até onde sei , temos o registro ALIAS do DNSimple e o registro ANAME do DNS Made Easy ; ambos se comportam de maneira semelhante.

Usando eles, você pode configurar seus registros como (usando a notação zonefile, mesmo que provavelmente faça isso na interface do usuário da web):

@   IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.

Lembre-se de que @aqui está um atalho para o domínio raiz ( example.com). Lembre-se também de que os pontos à direita são importantes, tanto em arquivos de zona quanto em algumas interfaces de usuário da web.

Veja também:

Observações:

  • O Amazon's Route 53 também tem um tipo de registro ALIAS, mas é um tanto limitado, pois só funciona para apontar dentro do AWS. No momento, eu não recomendaria usar isso para uma configuração do Heroku.

  • Algumas pessoas confundem provedores de DNS com registradores de nomes de domínio, pois há um pouco de sobreposição com empresas que oferecem ambos. Lembre-se de que, para mudar seu DNS para um dos provedores mencionados acima, você só precisa atualizar os registros do servidor de nomes com o registrador de domínio atual. Você não precisa transferir seu registro de domínio.

kch
fonte
1
Além disso, consulte o Centro de Desenvolvimento do Heroku
Jon Mountjoy
3
1 para mencionar o dnsimple. Os esforços deles para facilitar o trabalho com provedores de nuvem foram um grande fator na minha decisão de mudar para eles.
Subfuzão de
1
@kch você conhece alguma maneira de criar um tipo de registro DNS que se comporte como o ALIAS do DNSimple no BIND?
wlf
1
Não pense que você pode. É um recurso personalizado.
kch
2
CloudFlare também fornece esses recursos por meio do que eles chamam de nivelamento CNAME . Eles fazem isso automaticamente para os registros CNAME que você cria na raiz, mas irão habilitá-lo em toda a sua zona para todos os registros CNAME se você entrar em contato com eles e solicitar.
Adrian Frühwirth
4

Para apontar seu domínio apex / root / naked para um aplicativo hospedado pelo Heroku, você precisará usar um provedor de DNS que ofereça suporte a registros do tipo CNAME (geralmente chamados de registros ALIAS ou ANAME). Atualmente, o Heroku recomenda :

Qualquer que você escolher, seu registro terá a seguinte aparência:

Registro: ALIAS ouANAME

Nome: vazio ou@

Alvo: example.com.herokudns.com.

É tudo que você precisa.


No entanto, não é bom para o SEO ter a versão www e a não-www resolvidas. Um deve apontar para o outro como o URL canônico. Como você decide fazer isso depende se você está usando HTTPS ou não. E se você não estiver, provavelmente deveria estar, pois o Heroku agora lida com certificados SSL para você automaticamente e gratuitamente para todos os aplicativos executados em dinamômetros pagos.

Se não estiver usando HTTPS, você pode apenas configurar um registro de redirecionamento 301 com a maioria dos provedores de DNS apontando wwwpara o nome http://example.com.

Se você estiver usando HTTPS, provavelmente precisará lidar com o redirecionamento no nível do aplicativo. Se você quer saber por que, confira essas curta e longa explicações mas basicamente, como seu provedor de DNS ou outro serviço de encaminhamento de URL não tem, e não deveria ter, seu certificado SSL e chave privada, eles não podem responder a HTTPS solicitações para o seu domínio.

Para lidar com os redirecionamentos no nível do aplicativo, você precisará:

  • Adicione seus nomes de host apex e www ao aplicativo Heroku ( heroku domains:add example.comeheroku domains:add www.example.com )
  • Configure seus certificados SSL
  • Aponte seu registro de domínio apex para Heroku usando um registro ALIAS ou ANAME conforme descrito acima
  • Adicionar um registro CNAME com nome www apontando parawww.example.com.herokudns.com.
  • E então, em seu aplicativo, 301 redireciona quaisquer solicitações www para a URL não www ( aqui está um exemplo de como fazer isso no Django)
  • Além disso, em seu aplicativo, você provavelmente deve redirecionar quaisquer solicitações HTTP para HTTPS (por exemplo, no Django definido SECURE_SSL_REDIRECTcomo True)

Confira esta postagem do DNSimple para mais informações.

Jeff Bowen
fonte
3

Agora estou usando o Google Apps (para e-mail) e o Heroku como servidor da web. Estou usando o recurso de redirecionamento permanente 301 do Google Apps para redirecionar o domínio sem www para WWW.seu_domínio.com

Você pode encontrar as instruções passo a passo aqui https://stackoverflow.com/a/20115583/1440255

Leo Tulipan
fonte
2

Você não tem permissão para ter um registro CNAME para o domínio, pois o CNAME é um recurso de aliasing que cobre todos os tipos de dados (independentemente de o cliente procurar registros MX, NS ou SOA). Os CNAMEs também sempre se referem a um novo nome, não a um endereço IP, portanto, há na verdade dois erros em uma única linha

@                        IN CNAME   88.198.38.XXX

Alterar esse CNAME para um registro A deve funcionar, desde que o endereço IP que você usa seja o correto para o seu aplicativo Heroku.

A única maneira correta no DNS de fazer um domain.comnome simples funcionar no navegador é apontar o domínio para um endereço IP com um registro A.

Krisku
fonte
Ok, mas como posso descobrir meu IP? Via host appname.herokuapp.com/www.domain.com Acabei de receber um IP como este: 107.20.162.205 (Não existe esse aplicativo Heroku)
mrks de
1
Esse IP é o único a ser usado. Você simplesmente não pode testar no navegador com um endereço IP, porque o Heroku precisa saber o nome do aplicativo que você está tentando usar. Basta configurar o registro A no DNS e testar com o que, e o Heroku verá o nome que você está usando e tudo ficará bem!
krisku
Ok, mas sempre recebo um outro IP após "host appname.herokuapp.com".
março de
2
host app-name.herokuapp.comos resultados são dinâmicos. Se você os codificar, seu aplicativo eventualmente travará. Veja as soluções ANAME / CNAME recomendadas em outro comentário.
kch de
1
Você precisa de algum servidor da web com um endereço IP inalterável que possa realizar um redirecionamento HTTP de dominio.com -> www.dominio.com e apontar dominio.com para esse endereço IP. Então você pode ter um CNAME para www.domain.com apontando para o aplicativo heroku real.
krisku