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
Но если я скручиваю свой личный домен, я получаю перенаправление 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
Это также означает, что пользователь видит URL herokuapp.com
вместо моего пользовательского. .
В документах Heroku говорится, что:
Домен Heroku вашего приложения всегда будет активным, даже если вы установили
В документах Heroku говорится, что:
Домен Heroku вашего приложения всегда будет активным, даже если вы установили
В документах Heroku говорится, что:
Домен Heroku вашего приложения всегда будет активным, даже если вы установили создать собственный домен. Если вы хотите, чтобы пользователи использовали личный домен исключительно, ваше приложение должно отправлять HTTP-статус 301 Постоянно перемещен в указать веб-браузерам использовать личный домен. HTTP-запрос хоста поле заголовка покажет, к какому домену пытается получить доступ пользователь; Отправить перенаправление, если это поле example.herokuapp.com.
Относится ли ко мне вышеизложенное?
Оказывается, перенаправление происходило на уровне приложения. Служба поддержки Heroku подтвердила, что их маршрутизатор не добавляет перенаправления.
Если вы следовали инструкциям , то перед добавлением личного домена вам необходимо обновить конфигурацию:
url: [scheme: "https", host: "mysterious-meadow-6277.herokuapp.com", port: 443], force_ssl: [rewrite_on: [:x_forwarded_proto]]
Для всех остальных, кто сталкивается с этой проблемой, есть быстрое (но небезопасное) решение. Если ваше приложение обрабатывает какие-либо конфиденциальные данные, например, информацию о кредитной карте или данные для входа пользователя в систему, то НЕ используйте этот метод, а вместо этого настройте ваше приложение на работу с SSL.
В файле config/prod.exs должно быть что-то подобное:
# config/prod.exs
config :app, App.Endpoint,
http: [port: {:system, "PORT"}],
url: [scheme: "https", host: "app.herokuapp.com", port: 443],
force_ssl: [rewrite_on: [:x_forwarded_proto]],
cache_static_manifest: "priv/static/manifest.json",
secret_key_base: System.get_env("SECRET_KEY_BASE")
Вы хотите внести следующие изменения:
Это должно оставить вам нечто подобное:
# config/prod.exs
config :app, App.Endpoint,
http: [port: {:system, "PORT"}],
url: [scheme: "http", host: "app.herokuapp.com", port: 443],
cache_static_manifest: "priv/static/manifest.json",
secret_key_base: System.get_env("SECRET_KEY_BASE")
При следующей перестановке вы сможете посещать ваше приложение в вашем пользовательском домене.
.