Настройка переадресации URL-адресов на основе DNS в Amazon Route53 [закрыто]

143

Пытаюсь настроить пересылку в Amazon Route53. Моя последняя служба DNS (Nettica) позволяла мне направлять запросы с aws.example.com на https://myaccount.signin.aws.amazon.com/console/.

Поддерживается ли эта функция в Route53?

Как Nettica этого добивается? Вставляет ли он специальные записи A, CNAME, PTR или TXT?

Саурав
источник
Также работает создание дистрибутива Cloudfront с URL-адресом в качестве источника. Просто укажите домен на раздачу Cloudfront от Route53 и убедитесь, что сертификаты TLS настроены правильно.
Deiwin

Ответы:

329

Я столкнулся с той же проблемой, что описал Саурав, но мне действительно нужно было найти решение, которое не требовало бы ничего, кроме Route 53 и S3. Я создал для своего блога руководство с подробным описанием того, что я сделал.

Вот что я придумал.


Задача

Используя только инструменты, доступные в Amazon S3 и Amazon Route 53, создайте URL Redirect, который автоматически перенаправляет http://url-redirect-example.vivekmchawla.com на страницу входа в Консоль AWS с псевдонимом «MyAccount», расположенную по адресу https. : //myaccount.signin.aws.amazon.com/console/ .

Это руководство научит вас настраивать переадресацию URL-адресов на любой URL-адрес, а не только на URL-адреса Amazon. Вы узнаете, как настроить переадресацию в определенные папки (например, «/ console» в моем примере) и как изменить протокол переадресации с HTTP на HTTPS (или наоборот).


Шаг 1. Создайте корзину S3

Откройте консоль управления S3 и нажмите «Создать корзину».

Откройте консоль управления S3 и нажмите «Create Bucket».


Шаг 2. Назовите свою корзину S3

Назовите свой S3 Bucket

  1. Выберите название сегмента. Этот шаг действительно важен! Вы должны назвать сегмент ТОЧНО таким же, как URL-адрес, который вы хотите настроить для пересылки. В этом руководстве я буду использовать имя url-redirect-example.vivekmchawla.com.

  2. Выберите любой регион, который вам больше всего подходит. Если вы не знаете, оставьте значение по умолчанию.

  3. Не беспокойтесь о настройке ведения журнала. Когда будете готовы, просто нажмите кнопку «Создать».


Шаг 3. Включите статический хостинг веб-сайтов и укажите правила маршрутизации

Включите статический хостинг веб-сайтов и укажите правила маршрутизации

  1. В окне свойств откройте настройки «Статический хостинг веб-сайтов».
  2. Выберите вариант «Включить хостинг веб-сайтов».
  3. Введите значение для «Индексного документа». Этот объект (документ) никогда не будет обслуживаться S3, и вам никогда не придется его загружать. Просто используйте любое имя, какое хотите.
  4. Откройте настройки «Редактировать правила перенаправления».
  5. Вставьте следующий фрагмент XML целиком.

    <RoutingRules>
      <RoutingRule>
        <Redirect>
          <Protocol>https</Protocol>
          <HostName>myaccount.signin.aws.amazon.com</HostName>
          <ReplaceKeyPrefixWith>console/</ReplaceKeyPrefixWith>
          <HttpRedirectCode>301</HttpRedirectCode>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

Если вам интересно, что делает указанный выше XML, посетите документацию AWM для «Синтаксиса для определения правил маршрутизации» . Бонусная техника (здесь не рассматривается) - это, например, пересылка на определенные страницы на хосте назначения http://redirect-destination.com/console/special-page.html. Прочтите об <ReplaceKeyWith>элементе, если вам нужна эта функция.


Шаг 4. Обратите внимание на "конечную точку" сегмента переадресации

Запишите конечную точку сегмента переадресации

Обратите внимание на «конечную точку» статического хостинга веб-сайтов, которую Amazon автоматически создал для этого сегмента. Это понадобится вам позже, поэтому выделите весь URL-адрес, затем скопируйте и вставьте его в блокнот.

ВНИМАНИЕ! На этом этапе вы можете щелкнуть эту ссылку, чтобы проверить, правильно ли введены ваши правила перенаправления, но будьте осторожны! Вот почему ...

Допустим, вы ввели неправильное значение в <Hostname>теги в своих правилах перенаправления. Возможно, вы случайно набрали myaccount.amazon.comвместо myaccount.signin.aws.amazon.com. Если вы нажмете ссылку, чтобы проверить URL-адрес конечной точки, AWS с радостью перенаправит ваш браузер на неправильный адрес!

Заметив свою ошибку, вы, вероятно, отредактируете <Hostname>в своих правилах перенаправления, чтобы исправить ошибку. К сожалению, когда вы снова попытаетесь щелкнуть ссылку, вы, скорее всего, будете перенаправлены обратно на неправильный адрес! Даже если вы исправили <Hostname>запись, ваш браузер кэширует предыдущую (неправильную!) Запись. Это происходит потому, что мы используем перенаправление HTTP 301 (постоянное), которое браузеры, такие как Chrome и Firefox, будут кэшировать по умолчанию.

Если вы скопируете и вставите URL-адрес конечной точки в другой браузер (или очистите кеш в текущем), вы получите еще один шанс увидеть, является ли ваша обновленная <Hostname>запись, наконец, правильной.

На всякий случай, если вы хотите проверить URL-адрес конечной точки и правила перенаправления, вам следует открыть приватный сеанс просмотра, например «Режим инкогнито» в Chrome. Скопируйте, вставьте и проверьте URL-адрес конечной точки в режиме инкогнито, и все, что кэшируется, исчезнет после закрытия сеанса.


Шаг 5. Откройте консоль управления Route53 и перейдите к наборам записей для вашей размещенной зоны (доменное имя)

Откройте консоль управления Route 53, чтобы добавить наборы записей в свою размещенную зону.

  1. Выберите размещенную зону (доменное имя), которую вы использовали при создании корзины. Поскольку я назвал свой сегмент url-redirect-example.vivekmchawla.com, я собираюсь выбрать размещенную зону vivekmchawla.com.
  2. Нажмите кнопку «Перейти к наборам записей».

Шаг 6. Нажмите кнопку «Создать набор записей».

Нажмите кнопку Create Record Set.

При нажатии на «Создать набор записей» в правой части консоли управления Route53 откроется окно «Создать набор записей».


Шаг 7. Создайте набор записей CNAME

Создать набор записей CNAME

  1. В поле «Имя» введите часть имени хоста URL-адреса, который вы использовали при присвоении имени корзине S3. «Часть имени хоста» URL-адреса - это все, что находится слева от имени вашей размещенной зоны. Я назвал свою корзину S3 «url-redirect-example.vivekmchawla.com», а мою размещенную зону - «vivekmchawla.com», поэтому мне нужно ввести часть имени хоста «url-redirect-example».

  2. Выберите «CNAME - Каноническое имя» в качестве типа этого набора записей.

  3. В качестве значения вставьте URL-адрес конечной точки сегмента S3, который мы создали на шаге 3.

  4. Нажмите кнопку «Создать набор записей». Предполагая, что ошибок нет, теперь вы сможете увидеть новую запись CNAME в списке наборов записей вашей размещенной зоны.


Шаг 8. Протестируйте новую переадресацию URL

Откройте новую вкладку браузера и введите только что созданный URL-адрес. Для меня это http://url-redirect-example.vivekmchawla.com . Если все работает правильно, вы должны быть отправлены прямо на страницу входа в AWS.

Поскольку мы использовали myaccount.signin.aws.amazon.comпсевдоним в качестве целевого URL-адреса перенаправления, Amazon точно знает, к какой учетной записи мы пытаемся получить доступ, и перенаправляет нас прямо туда. Это может быть очень удобно, если вы хотите предоставить сотрудникам или подрядчикам короткую, понятную, фирменную ссылку для входа в AWS.

Все сделано!  Переадресация URL-адреса должна привести вас на страницу входа в AWS.


Выводы

Мне лично нравятся различные сервисы AWS, но если вы решили перенести управление DNS на Amazon Route 53, отсутствие простой переадресации URL-адресов может расстроить. Надеюсь, это руководство помогло немного упростить настройку переадресации URL-адресов для ваших размещенных зон.

Если вы хотите узнать больше, посетите следующие страницы сайта документации AWS.

Ура!

Вивек М. Чавла
источник
15
+1 за это чрезвычайно умное решение - большое спасибо за то, что нашли время для составления такого эпического пошагового руководства, я обновил свой ответ, чтобы соответственно направить будущих читателей к вашим!
Steffen Opel
24
Примечание: Для тех, кто хочет перенаправления на корневой домен: example.org -> example.com - сделайте все то же самое, за исключением использования A Record с включенным «Alias: Yes». Затем выберите ведро как цель.
JaredBroad
10
Отличное решение. Но у меня возникла проблема с использованием https для исходного URL-адреса. Если перенаправляемая корзина - dev.example.com, перенаправление отлично работает для http: // dev.example.com, но не работает для https: // dev.example.com. Я не нашел решения этой проблемы.
Грег
4
@Greg Я думаю, это может иметь какое-то отношение к тому, как Amazon обрабатывает HTTPS для S3. К сожалению, при использовании CNAME для доступа к корзине S3 вы не можете принудительно использовать SSL, добавив «https», потому что Amazon не размещает сертификат для «* .example.com». Поскольку S3 не разрешает соединение, мы никогда не дойдем до логики перенаправления. К сожалению, я не вижу решения этой проблемы.
Вивек М. Чавла,
17
В параметрах Bucker появилась новая опция «Перенаправить все запросы на другое имя хоста». Я поместил туда URL-адрес входа IAM, и он работал как шарм, без XML.
Дэн Милон
147

Служба поддержки AWS предложила более простое решение. По сути, это та же идея, предложенная @Vivek M. Chawla, но с более простой реализацией.

AWS S3:

  1. Создайте сегмент с именем вашего полного домена, например aws.example.com
  2. В свойствах корзины выберите Redirect all requests to another host nameи введите свой URL: https://myaccount.signin.aws.amazon.com/console/

AWS Route53:

  1. Создайте набор записей типа A. Измените псевдоним на Yes. Щелкните Alias Targetполе и выберите корзину S3, созданную на предыдущем шаге.

Ссылка: Как перенаправить домены с помощью Amazon Web Services

Официальная документация AWS: есть ли способ перенаправить домен на другой домен с помощью Amazon Route 53?

Роберто Шнайдерс
источник
16
Это отлично работает для HTTP, но не для HTTPS.
мифофечелон
@mythofechelon Что ты имеешь в виду? У меня пока не было проблем с https. Если вы хотите использовать https со своим доменом (например, https: // aws.example.com), это совершенно другая проблема, потому что для этого вам понадобится сервер с ssl-сертификатом.
Роберто
1
Официальная документация находится здесь: aws.amazon.com/premiumsupport/knowledge-center/…
Марио Оливио Флорес,
2
Этот Redirect all requests to another host nameвариант еще существует? Я не вижу этого, когда захожу в свойства корзины.
aidan
1
Это должен быть правильный ответ, лучше ссылаться на компоненты внутри AWS с использованием псевдонима для повышения производительности вместо CNAME (это работает, но это не лучший подход).
Дуглас Фигероа
11

Я смог использовать nginx для обработки 301 перенаправления на страницу входа в aws.

Перейдите в папку conf nginx (в моем случае /etc/nginx/sites-availableя создаю символическую ссылку /etc/nginx/sites-enabledдля включенных файлов conf).

Затем добавьте путь перенаправления

server {
  listen 80;
  server_name aws.example.com;
  return 301 https://myaccount.signin.aws.amazon.com/console;
}

Если вы используете nginx, у вас, скорее всего, будут дополнительные серверные блоки (virtualhosts в терминологии apache) для обработки вершины вашей зоны (example.com) или того, что у вас есть. Убедитесь, что один из них установлен в качестве сервера по умолчанию.

server {
  listen 80 default_server;
  server_name example.com;
  # rest of config ...
}

В Route 53 добавьте A recordfor aws.example.comи установите в качестве значения тот же IP-адрес, который используется для вершины вашей зоны.

Винсент Мак
источник
Еще лучше было бы использовать запись псевдонима, чтобы указать на эластичный балансировщик нагрузки перед этой машиной.
maletor
9

Обновить

Хотя мой исходный ответ ниже по-прежнему действителен и может быть полезен для понимания причины, по которой переадресация URL-адресов на основе DNS недоступна через Amazon Route 53 из коробки, я настоятельно рекомендую проверить чрезвычайно умное косвенное решение Vivek M. Chawla через представленное тем временем Amazon S3 поддерживает перенаправление веб-сайтов и обеспечивает меньше автономных серверов и, следовательно, бесплатное решение в рамках AWS только так.

  • Реализация автоматизированного решения для генерации таких перенаправлений оставлена ​​в качестве упражнения для читателя, но, пожалуйста, отдайте должное эпическому ответу Вивека, опубликовав свое решение;)

Оригинальный ответ

Для этого Nettica должна использовать специальное решение для перенаправления, вот в чем проблема:

Вы можете создать псевдоним CNAME, например aws.example.comдля myaccount.signin.aws.amazon.com, однако DNS не предоставляет официальной поддержки псевдонима подкаталога, как consoleв этом примере.

  • Жалко, что AWS, похоже, просто не делает это по умолчанию при ударе https://myaccount.signin.aws.amazon.com/(я только что попробовал), потому что он сразу же решит вашу проблему и имеет большой смысл; кроме того, на их стороне должно быть довольно легко настроить.

По этой причине несколько провайдеров DNS, по-видимому, реализовали собственное решение, позволяющее перенаправлять в подкаталоги; Рискну предположить, что они в основном упрощают псевдоним CNAME для собственного домена и снова перенаправляют оттуда в конечный пункт назначения через немедленное перенаправление HTTP 3xx .

Поэтому для достижения того же результата вам потребуется запустить HTTP-службу, выполняющую эти перенаправления, что, конечно, не является простым решением, на которое можно было бы надеяться. Может быть / надеюсь, кто-то все же сможет придумать более разумный подход.

Штеффен Опель
источник
4
CNAME являются псевдонимами и не перенаправляют.
ejain
@ejain - вы, конечно, правы, я исправил это соответствующим образом (должно быть, тогда уведомление пропустило); спасибо за указание на эту потенциально вводящую в заблуждение формулировку!
Steffen Opel
0

Если у вас все еще возникают проблемы с простым подходом, создав пустое ведро, затем в Redirect all requests to another host nameразделе Статический веб-хостинг в свойствах через консоль. Убедитесь, что вы установили 2 записи A в route53, одну для final-destination.comи одну для redirect-to.final-destination.com. Настройки для каждого из них будут идентичны, но имя будет другим, поэтому оно будет соответствовать именам, которые вы задали для своих сегментов / URL-адресов.

DanV
источник