在Amazon Route53中设置基于DNS的URL转发

我正在尝试在Amazon Route53中设置转发。 我最后的DNS服务(Nettica)允许我将请求路由到“aws.example.com”到“https://myaccount.signin.aws.amazon.com/console/”。

Route53支持这个function吗?

Nettica如何实现这一目标? 它是否插入特殊的A,CNAME,PTR或TXTlogging?

我遇到了与Saurav所描述的完全相同的问题,但我真的需要find一个解决scheme,除了Route 53和S3以外,不需要任何其他的解决scheme。 我为我的博客创build了一个指导,详细介绍了我所做的工作。

这是我想出来的。


目的

仅使用Amazon S3和Amazon Route 53中提供的工具,创build一个URLredirect,该URLredirect将http://url-redirect-example.vivekmchawla.com自动转发到别名为“MyAccount”的AWS Consolelogin页面,该页面位于https ://myaccount.signin.aws.amazon.com/console/ 。

本指南将教你如何将URL转发到任何URL,而不仅仅是来自Amazon的URL。 您将学习如何设置转发到特定的文件夹(如在我的示例中的“/ console”),以及如何将redirect协议从HTTP更改为HTTPS(反之亦然)。


第一步:创build你的S3桶

打开S3管理控制台并点击“Create Bucket”

打开S3pipe理控制台,然后点击“创build桶”。


第二步:命名您的S3桶

命名你的S3桶

  1. select一个桶名称。 这一步真的很重要! 您必须将存储区命名为与要为转发设置的URL完全相同。 对于本指南,我将使用名称“url-redirect-example.vivekmchawla.com”。

  2. select最适合你的地区。 如果你不知道,保持默认。

  3. 不要担心设置日志logging。 只要点击“创build”button,当你准备好了。


步骤3:启用静态网站托pipe并指定路由规则

启用静态网站托管并指定路由规则

  1. 在属性窗口中,打开“静态网站托pipe”的设置。
  2. select“启用网站托pipe”选项。
  3. 为“索引文件”input一个值。 这个对象(文档)将永远不会被S3服务,你永远不必上传它。 只要使用你想要的任何名字。
  4. 打开“编辑redirect规则”的设置。
  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 。 如果您需要此function,请阅读<ReplaceKeyWith>元素。


步骤4:记下你的redirect桶的“端点”

记下你的重定向桶的端点

记下亚马逊为此存储桶自动创build的静态网站托pipe“端点”。 您稍后需要使用此function,请突出显示整个url,然后将其复制并粘贴到记事本中。

警告! 此时您可以点击此链接查看您的redirect规则是否正确input,但要小心! 这是为什么…

假设您在redirect规则中的<Hostname>标记内input了错误的值。 也许你不小心键入myaccount.amazon.com ,而不是myaccount.signin.aws.amazon.com 。 如果您单击链接以testing端点URL,AWS会很乐意将您的浏览器redirect到错误的地址!

在注意到你的错误之后,你可能会编辑你的redirect规则中的<Hostname>来解决这个错误。 不幸的是,当您尝试再次点击链接时,您很可能最终被redirect回错误的地址! 即使您修复了<Hostname>条目,您的浏览器正在caching之前的(错误的!)条目。 发生这种情况是因为我们使用的是HTTP 301(永久)redirect,默认情况下Chrome和Firefox等浏览器将caching。

如果您将Endpoint URL复制并粘贴到其他浏览器(或清除当前caching中的caching),则可以再次看到更新后的<Hostname>条目是否正确无误。

为了安全起见,如果您想要testing您的端点url和redirect规则,您应该打开一个隐私浏览会话,如Chrome中的“隐身模式”。 在隐身模式下复制,粘贴和testing端点URL,closures会话后,任何caching的内容都将消失。


第5步:打开Route53pipe理控制台并转到您的托pipe区域的logging集(域名)

打开Route 53管理控制台,将记录集添加到托管区域

  1. select您创build存储桶时使用的托pipe区域(域名)。 由于我将我的存储桶命名为“url-redirect-example.vivekmchawla.com”,因此我将selectvivekmchawla.com托pipe区域。
  2. 点击“转到logging集”button。

第六步:点击“创buildlogging集”button

点击创建记录集按钮

点击“Create Record Set”将会打开Route53pipe理控制台右侧的Create Record Set窗口。


第7步:创build一个CNAMElogging集

创建一个CNAME记录集

  1. 在名称字段中,input命名S3存储桶时使用的URL的主机名部分。 URL的“主机名部分”是您托pipe区域名称的左侧的所有内容。 我将我的S3存储区命名为“url-redirect-example.vivekmchawla.com”,我的托pipe区域是“vivekmchawla.com”,因此我需要input的主机名部分是“url-redirect-example”。

  2. 为此logging集的typesselect“CNAME – 规范名称”。

  3. 对于Value,粘贴在我们在步骤3中创build的S3存储桶的Endpoint URL。

  4. 点击“创buildlogging集”button。 假设没有错误,您现在可以在托pipe区域的logging集列表中看到新的CNAMElogging。


第8步:testing您的新的URLredirect

打开一个新的浏览器选项卡并input我们刚刚设置的URL。 对我来说,这是http://url-redirect-example.vivekmchawla.com 。 如果一切正常,则应将其直接发送到AWSlogin页面。

因为我们使用myaccount.signin.aws.amazon.com别名作为我们redirect的目标url,所以Amazon知道我们正试图访问哪个帐户,并直接带我们到那里。 如果您想为员工或承包商提供简短,干净的品牌化AWSlogin链接,这可能非常方便。

全做完了!您的网址转发应该带您到AWS登录页面。


结论

我个人喜欢各种AWS服务,但是如果您决定将DNSpipe理迁移到Amazon Route 53,那么缺乏简单的URL转发可能会令人沮丧。 我希望这个指南能够帮助你更容易地为你的托pipe域设置URL转发。

如果您想了解更多信息,请参阅AWS文档站点的以下页面。

  • 示例:使用自定义域设置静态网站
  • 为网站托pipeconfiguration一个存储桶
  • 创build使用路由53的域
  • 创build,更改和删除资源logging

干杯!

AWS支持指出了一个更简单的解决scheme。 这与@Vivek M. Chawla提出的基本相同的想法有一个更简单的实现。

AWS S3:

  1. 创build一个名为你的完整域的桶,比如aws.example.com
  2. 在存储区属性上,selectRedirect all requests to another host name并input您的url: https://myaccount.signin.aws.amazon.com/console/https://myaccount.signin.aws.amazon.com/console/

AWS Route53:

  1. 创buildlogging集typesA.将别名更改为Yes 。 点击Alias Target字段,并select您在上一步中创build的S3存储桶。

参考: 如何使用Amazon Web Servicesredirect域

AWS官方文档: 是否有方法使用Amazon Route 53将域redirect到另一个域?

我能够使用nginx来处理301redirect到awslogin页面。

进入你的nginx conf文件夹(在我的情况下,它是/etc/nginx/sites-available ,其中我创build了启用conf文件的/etc/nginx/sites-enabled的符号链接)。

然后添加一个redirectpath

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

如果你正在使用nginx,你很可能会有额外的服务器模块(apache术语中的虚拟主机)来处理你的zone apex(example.com),或者你有它的设置。 确保你有一个设置为你的默认服务器。

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

在Route 53中,为aws.example.com添加一个A record ,并将该值设置为与您的区域顶点相同的IP。

更新

尽pipe下面的原始答案仍然有效,并且可能有助于理解基于DNS的URL转发不能通过Amazon Route 53开箱即用的原因,但我强烈build议您查看Vivek M. Chawla 完全智能的间接解决scheme 亚马逊对网站的支持redirect,并实现一个自包含的服务器less,因此在AWS内免费的解决scheme就像这样。

  • 实现一个自动化的解决scheme来产生这样的redirect是读者的一个练习,但请发表您的解决scheme致敬Vivek的史诗般的答案;)

原始答复

Nettica必须为此运行一个自定义的redirect解决scheme,这里是问题:

您可以为myaccount.signin.aws.amazon.com创build一个aws.example.comaws.example.com的CNAME别名,但是,在此示例中,DNS不提供对console子目录进行别名的官方支持。

  • 可惜的是,AWS似乎并没有像https://myaccount.signin.aws.amazon.com/ (我刚刚试过)那样简单地做到这一点,因为它会马上解决您的问题,并做出很多首先感觉; 另外,它们的configuration应该很容易。

出于这个原因,一些DNS提供商显然已经实现了一个定制的解决scheme,允许redirect到子目录。 我冒昧地猜测,他们基本上为他们自己的域名提供了一个CNAME别名,并通过即时HTTP 3xxredirect从那里再次redirect到最终目的地。

所以要达到相同的结果,你需要有一个HTTP服务运行执行这些redirect,这不是当然希望的简单解决scheme。 也许/希望有人能想出更聪明的方法。

如果您仍然遇到简单方法的问题,请创build一个空的存储桶,然后通过控制台Redirect all requests to another host name静态networking托pipe下的Redirect all requests to another host name 。 确保您已经在route53中设置了2个Alogging,一个用于final-destination.com ,另一个用于redirect-to.final-destination.com 。 每个设置都是相同的,但名称会有所不同,因此它与您为存储桶/ URL设置的名称相匹配。