Làm cách nào để thiết lập DNS cho miền apex (không có www) trỏ đến ứng dụng Heroku?


97

Tôi đã thêm một miền tùy chỉnh vào ứng dụng Heroku của mình và nó hoạt động với www.domain.com.

Tôi cũng cần biết cách thiết lập miền mà không cần wwwgiải quyết ứng dụng.

Đây là cài đặt DNS hiện tại của tôi:

$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

Cài đặt chính xác để sử dụng là gì để cả hai example.comwww.example.comsẽ trỏ chính xác đến ứng dụng Heroku của tôi?


btw có vẻ như cài đặt ftp / pop / smtp của bạn đều sai, vì nó trỏ đến www, trỏ đến heroku, người không thực hiện ftp / pop / smtp.
kch

Câu trả lời:


145

(Lưu ý: các tên miền gốc, cơ sở, đỉnh đều giống nhau. Sử dụng thay thế cho google-foo.)

Theo truyền thống, để trỏ miền đỉnh của bạn, bạn sẽ sử dụng bản ghi A trỏ tới IP máy chủ của bạn. Giải pháp này không mở rộng quy mô và không khả thi đối với nền tảng đám mây như Heroku, nơi có nhiều phụ trợ thay đổi và thường xuyên chịu trách nhiệm phản hồi các yêu cầu.

Đối với tên miền phụ (như www.example.com), bạn có thể sử dụng bản ghi CNAME trỏ tới your-app-name.herokuapp.com. Từ đó trở đi, Heroku quản lý các bản ghi A động đằng sau your-app-name.herokuapp.comđể chúng luôn được cập nhật. Thật không may, đặc tả DNS không cho phép bản ghi CNAME trên vùng đỉnh (miền cơ sở). (Ví dụ: các bản ghi MX sẽ phá vỡ vì CNAME sẽ được theo sau đến mục tiêu của nó trước.)

Quay lại miền gốc, giải pháp đơn giản và chung chung là hoàn toàn không sử dụng chúng. Như một biện pháp dự phòng, một số nhà cung cấp DNS đề nghị thiết lập chuyển hướng HTTP cho bạn. Trong trường hợp đó, hãy thiết lập nó để example.comchuyển hướng HTTP đến www.example.com.

Một số nhà cung cấp DNS đã đưa ra các giải pháp tùy chỉnh cho phép hành vi giống như CNAME trên vùng đỉnh. Theo hiểu biết của tôi, chúng tôi có bản ghi ALIAS của DNSimplebản ghi ANAME của DNS Made Easy ; cả hai đều hành xử tương tự.

Sử dụng những thứ đó, bạn có thể thiết lập các bản ghi của mình dưới dạng (sử dụng ký hiệu tệp vùng, thậm chí bạn có thể thực hiện việc này trên giao diện người dùng web của họ):

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

Hãy nhớ @đây là cách viết tắt cho miền gốc ( example.com). Cũng xin lưu ý với bạn rằng các dấu chấm ở cuối rất quan trọng, cả trong tệp vùng và một số giao diện người dùng web.

Xem thêm:

Nhận xét:

  • Lộ trình 53 của Amazon cũng có loại bản ghi ALIAS, nhưng nó hơi hạn chế, ở chỗ nó chỉ hoạt động để trỏ trong AWS. Hiện tại, tôi không khuyên bạn nên sử dụng cái này để thiết lập Heroku.

  • Một số người nhầm lẫn giữa các nhà cung cấp DNS với các công ty đăng ký tên miền, vì có một chút trùng lặp với các công ty cung cấp cả hai. Lưu ý với bạn rằng để chuyển DNS của bạn sang một trong các nhà cung cấp đã nói ở trên, bạn chỉ cần cập nhật các bản ghi máy chủ định danh của mình với công ty đăng ký tên miền hiện tại của bạn. Bạn không cần phải chuyển đăng ký miền của mình.



3
+1 để đề cập dnsimple. Những nỗ lực của họ để làm việc với các nhà cung cấp dịch vụ đám mây dễ dàng hơn là một yếu tố quan trọng khiến tôi quyết định chuyển sang họ.
Subfuzion

1
@kch bạn có biết cách nào để tôi có thể tạo loại bản ghi DNS hoạt động giống như ALIAS của DNSimple trong BIND không?
wlf

1
Đừng nghĩ rằng bạn có thể. Đó là một tính năng tùy chỉnh.
kch

2
CloudFlare cũng cung cấp tính năng này thông qua cái mà họ gọi là làm phẳng CNAME . Họ tự động thực hiện việc này đối với các bản ghi CNAME mà bạn tạo ở gốc nhưng họ sẽ bật nó trên toàn bộ vùng của bạn cho tất cả các bản ghi CNAME nếu bạn liên hệ với họ và yêu cầu nó.
Adrian Frühwirth

4

Để trỏ miền apex / root / naked của bạn tới một ứng dụng được lưu trữ trên máy chủ Heroku, bạn sẽ cần sử dụng nhà cung cấp DNS hỗ trợ các bản ghi giống CNAME (thường được gọi là bản ghi ALIAS hoặc ANAME). Hiện tại Heroku khuyến nghị :

Cho dù bạn chọn cái nào trong số đó, bản ghi của bạn sẽ giống như sau:

Ghi lại: ALIAS hoặcANAME

Tên: trống hoặc@

Mục tiêu: example.com.herokudns.com.

Đó là tất cả những gì bạn cần.


Tuy nhiên, việc giải quyết cả phiên bản có www và phiên bản không có www sẽ không tốt cho SEO . Một cái phải trỏ đến cái kia là URL chuẩn. Cách bạn quyết định làm điều đó tùy thuộc vào việc bạn có đang sử dụng HTTPS hay không. Và nếu bạn không, có lẽ bạn nên giống như Heroku hiện xử lý chứng chỉ SSL cho bạn cách tự động và miễn phí cho tất cả các ứng dụng chạy trên dynos trả phí.

Nếu không sử dụng HTTPS, bạn chỉ có thể thiết lập bản ghi Chuyển hướng 301 với hầu hết các nhà cung cấp DNS trỏ wwwđếnhttp://example.com .

Nếu đang sử dụng HTTPS, rất có thể bạn sẽ cần xử lý chuyển hướng ở cấp ứng dụng. Nếu bạn muốn biết lý do tại sao, hãy xem các bài viết ngắndài này giải thích nhưng về cơ bản vì nhà cung cấp DNS của bạn hoặc dịch vụ chuyển tiếp URL khác của bạn không có và không nên có, chứng chỉ SSL và khóa cá nhân của bạn nên chúng không thể phản hồi HTTPS yêu cầu cho miền của bạn.

Để xử lý các chuyển hướng ở cấp ứng dụng, bạn sẽ cần:

  • Thêm cả tên máy chủ apex và www của bạn vào ứng dụng Heroku ( heroku domains:add example.comheroku domains:add www.example.com)
  • Thiết lập chứng chỉ SSL của bạn
  • Trỏ bản ghi miền đỉnh của bạn tới Heroku bằng bản ghi ALIAS hoặc ANAME như được mô tả ở trên
  • Thêm bản ghi CNAME với tên wwwtrỏ đếnwww.example.com.herokudns.com.
  • Và sau đó trong ứng dụng của bạn, 301 chuyển hướng bất kỳ yêu cầu www nào đến URL không phải www ( đây là ví dụ về cách thực hiện trong Django)
  • Cũng trong ứng dụng của bạn, bạn có thể nên chuyển hướng bất kỳ yêu cầu HTTP nào đến HTTPS (ví dụ: trong Django được đặt SECURE_SSL_REDIRECTthành True)

Kiểm tra bài đăng này từ DNSimple để biết thêm.


3

Tôi hiện đang sử dụng Google Apps (cho Email) và Heroku làm máy chủ web. Tôi đang sử dụng tính năng Chuyển hướng vĩnh viễn của Google Apps 301 để chuyển hướng miền rỗng đến WWW.your_domain.com

Bạn có thể tìm thấy hướng dẫn từng bước tại đây https://stackoverflow.com/a/20115583/1440255


2

Bạn không được phép có bản ghi CNAME cho miền, vì CNAME là một tính năng bí danh bao gồm tất cả các loại dữ liệu (bất kể máy khách tìm kiếm bản ghi MX, NS hay SOA). CNAME cũng luôn đề cập đến tên mới, không phải địa chỉ ip, vì vậy thực sự có hai lỗi trong một dòng

@                        IN CNAME   88.198.38.XXX

Thay đổi CNAME đó thành bản ghi A sẽ làm cho nó hoạt động, miễn là địa chỉ ip bạn sử dụng là địa chỉ ip chính xác cho ứng dụng Heroku của bạn.

Cách duy nhất trong DNS để làm cho một domain.comtên đơn giản hoạt động trong trình duyệt, là trỏ miền đến địa chỉ IP có bản ghi A.


Ok nhưng làm cách nào để tìm ra IP của tôi? Qua tên máy chủ appname.herokuapp.com/www.domain.com, tôi chỉ nhận được một IP như vậy: 107.20.162.205 (Không có ứng dụng Heroku nào như vậy)
mrks

1
IP đó là IP để sử dụng. Bạn chỉ không thể kiểm tra trong trình duyệt bằng địa chỉ IP, vì Heroku cần biết tên của ứng dụng bạn đang cố gắng sử dụng. Chỉ cần thiết lập bản ghi A trong DNS và kiểm tra với hơn, và Heroku sẽ thấy tên bạn đang sử dụng và tất cả đều ổn!
krisku

Ok nhưng tôi nhận được mỗi lần một IP khác sau "host appname.herokuapp.com".
mrks

2
host app-name.herokuapp.comkết quả là động. Nếu bạn hardcode những thứ đó, ứng dụng của bạn cuối cùng sẽ bị phanh. Xem các giải pháp ANAME / CNAME được đề xuất trong một nhận xét khác.
kch

1
Bạn cần một số máy chủ web có địa chỉ IP không thay đổi có thể thực hiện chuyển hướng HTTP từ domain.com -> www.domain.com và trỏ domain.com đến địa chỉ IP đó. Sau đó, bạn có thể có CNAME cho www.domain.com trỏ đến ứng dụng heroku thực.
krisku
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.