Heroku 앱을 가리키는 apex 도메인 (www 없음)에 대해 DNS를 설정하려면 어떻게해야합니까?


97

이미 Heroku 앱에 사용자 지정 도메인을 추가했으며 www.domain.com.

www앱을 확인 하지 않고 도메인을 설정하는 방법도 알아야합니다 .

내 현재 DNS 설정은 다음과 같습니다.

$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

example.com와 둘 다 www.example.com내 Heroku 앱을 올바르게 가리 키 도록 사용하는 올바른 설정은 무엇입니까 ?


btw는 ftp / pop / smtp를 수행하지 않는 heroku를 가리키는 www를 가리 키기 때문에 ftp / pop / smtp 설정이 모두 잘못된 것처럼 보입니다.
kch 2013-04-16

답변:


145

(참고 : root, base, apex 도메인은 모두 동일합니다. google-foo와 같은 의미로 사용합니다.)

전통적으로 apex 도메인을 가리 키려면 서버의 IP를 가리키는 A 레코드를 사용합니다. 이 솔루션은 확장되지 않으며 Heroku와 같은 클라우드 플랫폼에서 실행 가능하지 않습니다. 여기에서 자주 변경되는 여러 백엔드가 요청에 응답해야합니다.

하위 도메인 (예 :)의 경우를 www.example.com가리키는 CNAME 레코드를 사용할 수 있습니다 your-app-name.herokuapp.com. 이후부터 Heroku는 동적 A 레코드를 관리하여 your-app-name.herokuapp.com항상 최신 상태를 유지합니다. 안타깝게도 DNS 사양은 zone apex (기본 도메인)에서 CNAME 레코드를 허용하지 않습니다. (예를 들어 MX 레코드는 CNAME이 먼저 대상을 따르기 때문에 중단됩니다.)

루트 도메인으로 돌아가서 간단하고 일반적인 솔루션은 전혀 사용하지 않는 것입니다. 대체 조치로 일부 DNS 공급자는 HTTP 리디렉션 설정을 제공합니다. 이 경우 example.comHTTP 리디렉션이 www.example.com.

일부 DNS 공급자는 zone apex에서 CNAME과 유사한 동작을 허용하는 사용자 지정 솔루션을 제공합니다. 제가 아는 한 DNSimple의 ALIAS 레코드DNS Made Easy의 ANAME 레코드가 있습니다 . 둘 다 비슷하게 작동합니다.

이를 사용하여 레코드를 다음과 같이 설정할 수 있습니다 (zonefile 표기법을 사용하여 웹 사용자 인터페이스에서이 작업을 수행 할 수도 있음).

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

기억 @여기하는 루트 도메인에 대한 속기 ( example.com). 또한 영역 파일과 일부 웹 사용자 인터페이스에서 후행 점이 중요합니다.

또한보십시오:

비고 :

  • Amazon의 Route 53에도 ALIAS 레코드 유형이 있지만 AWS 내에서만 작동한다는 점에서 다소 제한적입니다. 현재로서는 Heroku 설정에 이것을 사용하지 않는 것이 좋습니다.

  • 일부 사람들은 DNS 공급자를 도메인 이름 등록 기관과 혼동합니다. 두 가지를 모두 제공하는 회사와 약간의 겹침이 있기 때문입니다. DNS를 앞서 언급 한 공급자 중 하나로 전환하려면 현재 도메인 등록 기관으로 이름 서버 레코드를 업데이트하기 만하면됩니다. 도메인 등록을 이전 할 필요가 없습니다.



3
dnsimple을 언급하면 ​​+1. 클라우드 제공 업체와 더 쉽게 작업 할 수 있도록하려는 그들의 노력은 그들로 전환하기로 결정한 큰 요인이었습니다.
Subfuzion

1
@kch BIND에서 DNSimple의 ALIAS처럼 작동하는 DNS 레코드 유형을 만들 수있는 방법을 알고 있습니까?
wlf 2013.08.30

1
할 수 있다고 생각하지 마십시오. 사용자 지정 기능입니다.
kch

2
CloudFlare는 또한 CNAME 평면화 라고하는 기능을 통해이 기능을 제공합니다 . 루트에서 생성 한 CNAME 레코드에 대해 자동으로이 작업을 수행하지만 연락하여 요청하면 모든 CNAME 레코드에 대해 전체 영역에서 활성화합니다.
Adrian Frühwirth 2014

4

Heroku에서 호스팅하는 애플리케이션에서 apex / root / naked 도메인을 가리 키려면 CNAME과 유사한 레코드 (종종 ALIAS 또는 ANAME 레코드라고 함)를 지원하는 DNS 공급자를 사용해야합니다. 현재 Heroku 다음을 권장합니다 .

어떤 항목을 선택하든 기록은 다음과 같습니다.

기록 : ALIAS 또는ANAME

이름 : 비어 있거나@

표적: example.com.herokudns.com.

그게 전부입니다.


그러나 SEO 가 www 버전과 www가 아닌 ​​버전을 모두 확인하는 것은 좋지 않습니다 . 하나는 표준 URL로 다른 하나를 가리켜 야합니다. 이를 수행하는 방법은 HTTPS를 사용하는지 여부에 따라 다릅니다. 그렇지 않은 경우 Heroku가 이제 유료 dyno에서 실행되는 모든 응용 프로그램에 대해 자동으로 SSL 인증서 를 무료로 처리 하므로 아마도 그럴 것입니다 .

HTTPS를 사용하지 않는 경우 대부분의 DNS 공급자가 이름 www을 가리키는 301 리디렉션 레코드로 301 리디렉션 레코드를 설정할 수 있습니다 http://example.com.

당신이 경우 하는 HTTPS를 사용하여, 당신은 대부분 필요는 응용 프로그램 수준에서 리디렉션을 처리 할 수 있습니다. 당신이 체크 아웃, 이유를 알고 싶다면 짧은 설명을하지만, 기본적으로 DNS 공급자 또는 다른 URL 포워딩 서비스를 가지고 있지 않기 때문에, 그리고 SSL 인증서와 개인 키를 필요는 없습니다, 그들은 HTTPS를하지 응답 할 수 도메인에 대한 요청.

애플리케이션 수준에서 리디렉션을 처리하려면 다음을 수행해야합니다.

  • Heroku 애플리케이션에 apex 및 www 호스트 이름을 모두 추가합니다 ( heroku domains:add example.comheroku domains:add www.example.com)
  • SSL 인증서 설정
  • 위에서 설명한대로 ALIAS 또는 ANAME 레코드를 사용하여 Heroku에서 apex 도메인 레코드를 가리 킵니다.
  • 이름이 www가리키는 CNAME 레코드 추가www.example.com.herokudns.com.
  • 그런 다음 애플리케이션에서 www 요청을 www가 아닌 ​​URL로 301 리디렉션합니다 ( 여기 Django에서 수행하는 방법에 대한 예가 있습니다 ).
  • 또한 응용 프로그램에서, 당신이해야 아마 어떤 HTTP HTTPS 요청 (예를 들어, 리디렉션 장고는 설정 SECURE_SSL_REDIRECTTrue)

자세한 내용은 DNSimple 의이 게시물 을 확인하십시오 .


3

지금은 Google Apps (이메일 용)와 Heroku를 웹 서버로 사용하고 있습니다. Google Apps 301 영구 리디렉션 기능을 사용하여 기본 도메인을 WWW.your_domain.com으로 리디렉션합니다.

여기에서 단계별 지침을 찾을 수 있습니다. https://stackoverflow.com/a/20115583/1440255


2

CNAME은 (클라이언트가 MX, NS 또는 SOA 레코드를 찾는 지 여부에 관계없이) 모든 데이터 유형을 포함하는 별칭 기능이므로 도메인에 대한 CNAME 레코드를 가질 수 없습니다. CNAME은 또한 항상 IP 주소가 아닌 새 이름을 참조하므로 실제로 한 줄에 두 개의 오류 가 있습니다.

@                        IN CNAME   88.198.38.XXX

해당 CNAME을 A 레코드로 변경하면 사용하는 ip-address가 Heroku 앱에 대한 올바른 주소이면 제대로 작동합니다.

DNS domain.com에서 브라우저에서 간단한 이름이 작동 하도록하는 유일한 올바른 방법 은 A 레코드가있는 IP 주소를 도메인에 지정하는 것입니다.


좋아, 내 IP를 어떻게 찾을 수 있습니까? 호스트 appname.herokuapp.com/www.domain.com을 통해 다음과 같은 IP를 얻습니다. 107.20.162.205 (해당 Heroku 앱 없음)
mrks

1
그 IP는 사용할 IP입니다. Heroku는 사용하려는 앱의 이름을 알아야하기 때문에 IP 주소로 브라우저에서 테스트 할 수 없습니다. DNS에 A 레코드를 설정하고 than으로 테스트하면 Heroku가 사용중인 이름을 볼 수 있으며 모두 잘 될 것입니다!
krisku 2013-04-16

좋습니다.하지만 매번 "host appname.herokuapp.com"다음에 다른 IP를 얻습니다.
mrks apr

2
host app-name.herokuapp.com결과는 동적입니다. 하드 코딩하면 결국 앱이 중단됩니다. 다른 의견에서 권장되는 ANAME / CNAME 솔루션을 참조하십시오.
kch

1
domain.com-> www.domain.com에서 HTTP 리디렉션을 수행하고 domain.com을 해당 IP 주소로 지정할 수있는 변경되지 않는 IP 주소를 가진 웹 서버가 필요합니다. 그런 다음 www.domain.com의 CNAME이 실제 heroku 앱을 가리 키도록 할 수 있습니다.
krisku 2013-04-18
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.