Bagaimana cara menyiapkan DNS untuk domain apex (tanpa www) yang mengarah ke aplikasi Heroku?

97

Saya sudah menambahkan domain khusus ke aplikasi Heroku saya dan berfungsi dengan www.domain.com.

Saya perlu tahu cara menyiapkan domain tanpa wwwharus menyelesaikan ke aplikasi juga.

Berikut adalah pengaturan DNS saya saat ini:

$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

Apa pengaturan yang benar untuk digunakan sehingga keduanya example.comdan www.example.comakan mengarah dengan benar ke aplikasi Heroku saya?

mrks
sumber
btw sepertinya semua pengaturan ftp / pop / smtp Anda salah, karena mengarah ke www, yang mengarah ke heroku, yang tidak melakukan ftp / pop / smtp.
kch
Solusi lain stackoverflow.com/a/11494197/176877
Chris Moschini

Jawaban:

145

(Catatan: domain root, base, apex semuanya sama. Menggunakan secara bergantian untuk google-foo.)

Secara tradisional, untuk mengarahkan domain apex Anda, Anda akan menggunakan rekam A yang menunjuk ke IP server Anda. Solusi ini tidak dapat diskalakan dan tidak dapat digunakan untuk platform cloud seperti Heroku, di mana beberapa backend yang sering berubah bertanggung jawab untuk menanggapi permintaan.

Untuk subdomain (seperti www.example.com) Anda dapat menggunakan catatan CNAME yang mengarah ke your-app-name.herokuapp.com. Sejak saat itu, Heroku mengelola rekam A dinamis di belakangnya your-app-name.herokuapp.comsehingga selalu mutakhir. Sayangnya, spesifikasi DNS tidak mengizinkan catatan CNAME di puncak zona (domain dasar). (Misalnya, data MX akan rusak karena CNAME akan diikuti ke targetnya terlebih dahulu.)

Kembali ke domain root, solusi sederhana dan umum adalah dengan tidak menggunakannya sama sekali. Sebagai tindakan fallback, beberapa penyedia DNS menawarkan untuk menyiapkan pengalihan HTTP untuk Anda. Dalam kasus tersebut, atur sehingga itu example.comadalah pengalihan HTTP ke www.example.com.

Beberapa penyedia DNS telah maju dengan solusi khusus yang memungkinkan perilaku seperti CNAME di puncak zona. Sepengetahuan saya, kami memiliki catatan ALIAS DNSimple dan catatan ANAME DNS Made Easy ; keduanya berperilaku serupa.

Dengan menggunakan itu, Anda dapat mengatur catatan Anda sebagai (menggunakan notasi file zona, bahkan Anda mungkin akan melakukan ini di antarmuka pengguna web mereka):

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

Ingat di @sini adalah singkatan dari root domain ( example.com). Perlu diingat juga bahwa trailing dots penting, baik di zonefiles, dan beberapa antarmuka pengguna web.

Lihat juga:

Catatan:

  • Rute 53 Amazon juga memiliki jenis catatan ALIAS, tetapi agak terbatas, karena hanya berfungsi untuk menunjuk di dalam AWS. Saat ini saya tidak akan merekomendasikan penggunaan ini untuk penyiapan Heroku.

  • Beberapa orang bingung antara penyedia DNS dengan pencatat nama domain, karena ada sedikit tumpang tindih dengan perusahaan yang menawarkan keduanya. Ingatlah bahwa untuk mengalihkan DNS Anda ke salah satu penyedia yang disebutkan di atas, Anda hanya perlu memperbarui catatan server nama Anda dengan pencatatan domain Anda saat ini. Anda tidak perlu mentransfer pendaftaran domain Anda.

kch
sumber
1
Juga, lihat Pusat Pengembang Heroku
Jon Mountjoy
3
1 untuk menyebutkan dnsimple. Upaya mereka untuk mempermudah bekerja dengan penyedia cloud merupakan faktor besar dalam keputusan saya untuk beralih ke mereka.
Subfuzion
1
@kch apakah Anda tahu cara membuat jenis catatan DNS yang berperilaku seperti ALIAS DNSimple di BIND?
wlf
1
Jangan pikir kamu bisa. Itu adalah fitur khusus.
kch
2
CloudFlare juga menyediakan fitur ini melalui apa yang mereka sebut perataan CNAME . Mereka secara otomatis melakukan ini untuk data CNAME yang Anda buat di root tetapi mereka akan mengaktifkannya di seluruh zona Anda untuk semua data CNAME jika Anda menghubungi mereka dan memintanya.
Adrian Frühwirth
4

Untuk mengarahkan domain apex / root / naked Anda ke aplikasi yang dihosting Heroku, Anda harus menggunakan penyedia DNS yang mendukung data seperti CNAME (sering disebut sebagai data ALIAS atau ANAME). Saat ini Heroku merekomendasikan :

Yang mana pun yang Anda pilih, rekaman Anda akan terlihat seperti berikut:

Rekam: ALIAS atauANAME

Nama: kosong atau@

Target: example.com.herokudns.com.

Hanya itu yang Anda butuhkan.


Namun, tidak baik bagi SEO untuk memiliki resolusi versi www dan non-www. Yang satu harus menunjuk ke yang lain sebagai URL kanonis. Bagaimana Anda memutuskan untuk melakukannya tergantung pada apakah Anda menggunakan HTTPS atau tidak. Dan jika tidak, Anda mungkin harus menjadi seperti Heroku sekarang menangani sertifikat SSL untuk Anda secara otomatis dan gratis untuk semua aplikasi yang berjalan di dino berbayar.

Jika Anda tidak menggunakan HTTPS, Anda cukup menyiapkan catatan Pengalihan 301 dengan sebagian besar penyedia DNS menunjuk wwwke http://example.com.

Jika Anda sedang menggunakan HTTPS, kemungkinan besar Anda akan perlu untuk menangani redirection di tingkat aplikasi. Jika Anda ingin tahu alasannya, lihat pendek dan panjang ini penjelasan tetapi pada dasarnya karena penyedia DNS Anda atau layanan penerusan URL lainnya tidak memiliki, dan seharusnya tidak memiliki, sertifikat SSL dan kunci pribadi Anda, mereka tidak dapat menanggapi HTTPS permintaan untuk domain Anda.

Untuk menangani pengalihan di tingkat aplikasi, Anda harus:

  • Tambahkan nama host apex dan www ke aplikasi Heroku ( heroku domains:add example.comdan heroku domains:add www.example.com)
  • Siapkan sertifikat SSL Anda
  • Arahkan data domain puncak Anda ke Heroku menggunakan data ALIAS atau ANAME seperti yang dijelaskan di atas
  • Tambahkan data CNAME dengan nama wwwmengarah kewww.example.com.herokudns.com.
  • Lalu di aplikasi Anda, 301 alihkan semua permintaan www ke URL non-www ( berikut contohnya bagaimana melakukannya di Django)
  • Juga dalam aplikasi Anda, Anda mungkin harus mengarahkan setiap permintaan HTTP ke HTTPS (misalnya, dalam Django diatur SECURE_SSL_REDIRECTke True)

Lihat posting ini dari DNSimple untuk lebih lanjut.

Jeff Bowen
sumber
3

Saya sekarang menggunakan Google Apps (untuk Email) dan Heroku sebagai server web. Saya menggunakan fitur Pengalihan Permanen 301 Google Apps untuk mengalihkan domain polos ke WWW.domain_Anda.com

Anda dapat menemukan petunjuk langkah demi langkah di sini https://stackoverflow.com/a/20115583/1440255

Leo Tulipan
sumber
2

Anda tidak diperbolehkan memiliki data CNAME untuk domain tersebut, karena CNAME adalah fitur aliasing yang mencakup semua jenis data (terlepas dari apakah klien mencari data MX, NS, atau SOA). CNAME juga selalu mengacu pada nama baru, bukan alamat ip, jadi sebenarnya ada dua kesalahan dalam satu baris

@                        IN CNAME   88.198.38.XXX

Mengubah CNAME itu menjadi rekam A akan membuatnya berfungsi, asalkan alamat ip yang Anda gunakan adalah yang benar untuk aplikasi Heroku Anda.

Satu-satunya cara yang benar di DNS untuk membuat domain.comnama sederhana berfungsi di browser, adalah mengarahkan domain ke alamat IP dengan rekam A.

Krisku
sumber
Ok, tapi bagaimana cara mengetahui IP saya? Melalui nama aplikasi host.herokuapp.com/www.domain.com Saya baru saja mendapatkan IP seperti itu: 107.20.162.205 (Tidak ada Aplikasi Heroku seperti itu)
mrks
1
IP itu yang akan digunakan. Anda tidak dapat menguji di browser dengan alamat IP, karena Heroku perlu mengetahui nama aplikasi yang Anda coba gunakan. Cukup atur A record di DNS dan uji dengan than, dan Heroku akan melihat nama yang Anda gunakan dan semuanya akan baik-baik saja!
krisku
Ok tapi saya mendapatkan setiap kali IP lain setelah "host appname.herokuapp.com".
mrks
2
host app-name.herokuapp.comhasilnya dinamis. Jika Anda melakukan hardcode, aplikasi Anda pada akhirnya akan rem. Lihat solusi ANAME / CNAME yang direkomendasikan di komentar lain.
kch
1
Anda memerlukan beberapa server web dengan alamat IP yang tidak berubah yang dapat melakukan pengalihan HTTP dari domain.com -> www.domain.com, dan mengarahkan domain.com ke alamat IP tersebut. Kemudian Anda dapat memiliki CNAME untuk www.domain.com yang mengarah ke aplikasi heroku yang sebenarnya.
Krisku