Domain-Name-System

CNAME 到 Heroku 應用程序導致 301 重定向

  • August 2, 2017

TL;DR:我希望我的自定義域顯示在地址欄中,而不是 CNAME。

我有一個託管在 Heroku 上的應用程序,地址為try-elixir-phoenix.herokuapp.com

我從 Namecheap 購買了域名,並在那裡配置了 CNAME 條目:

www.tryelixir.online CNAME try-elixir-phoenix.herokuapp.com.

我還在heroku中配置了自定義域:

$ heroku domains
=== try-elixir-phoenix Heroku Domain
try-elixir-phoenix.herokuapp.com

=== try-elixir-phoenix Custom Domains
Domain Name           DNS Target
────────────────────  ────────────────────────────────
tryelixir.online      try-elixir-phoenix.herokuapp.com
www.tryelixir.online  try-elixir-phoenix.herokuapp.com

但是如果我 curl 我的自定義域,我會得到一個 301 重定向:

$ curl --head http://www.tryelixir.online
HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Server: Cowboy
Date: Thu, 25 Feb 2016 15:11:01 GMT
Content-Length: 0
Cache-Control: max-age=0, private, must-revalidate
Location: https://try-elixir-phoenix.herokuapp.com/
Via: 1.1 vegur

這也意味著使用者看到的是herokuapp.comURL,而不是我的自定義 URL。

Heroku 文件說:

即使您設置了自定義域,您應用的 Heroku 域也將始終保持活動狀態。如果您希望使用者獨占使用自定義域,您的應用應發送 HTTP 狀態 301 Moved Permanently 以告知 Web 瀏覽器使用自定義域。Host HTTP 請求標頭欄位將顯示使用者嘗試訪問的域;如果該欄位是 example.herokuapp.com,則發送重定向。

以上是否適用於我?

事實證明,重定向發生在應用程序級別。Heroku 的支持證實他們的路由器沒有添加任何重定向。

如果您按照說明操作,那麼在添加自定義域之前,您需要更新配置:

url: [scheme: "https", host: "mysterious-meadow-6277.herokuapp.com", port: 443], force_ssl: [rewrite_on: [:x_forwarded_proto]]

引用自:https://serverfault.com/questions/759775