在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桶
打开S3pipe理控制台,然后点击“创build桶”。
第二步:命名您的S3桶
-
select一个桶名称。 这一步真的很重要! 您必须将存储区命名为与要为转发设置的URL完全相同。 对于本指南,我将使用名称“url-redirect-example.vivekmchawla.com”。
-
select最适合你的地区。 如果你不知道,保持默认。
-
不要担心设置日志logging。 只要点击“创build”button,当你准备好了。
步骤3:启用静态网站托pipe并指定路由规则
- 在属性窗口中,打开“静态网站托pipe”的设置。
- select“启用网站托pipe”选项。
- 为“索引文件”input一个值。 这个对象(文档)将永远不会被S3服务,你永远不必上传它。 只要使用你想要的任何名字。
- 打开“编辑redirect规则”的设置。
-
粘贴下面的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集(域名)
- select您创build存储桶时使用的托pipe区域(域名)。 由于我将我的存储桶命名为“url-redirect-example.vivekmchawla.com”,因此我将selectvivekmchawla.com托pipe区域。
- 点击“转到logging集”button。
第六步:点击“创buildlogging集”button
点击“Create Record Set”将会打开Route53pipe理控制台右侧的Create Record Set窗口。
第7步:创build一个CNAMElogging集
-
在名称字段中,input命名S3存储桶时使用的URL的主机名部分。 URL的“主机名部分”是您托pipe区域名称的左侧的所有内容。 我将我的S3存储区命名为“url-redirect-example.vivekmchawla.com”,我的托pipe区域是“vivekmchawla.com”,因此我需要input的主机名部分是“url-redirect-example”。
-
为此logging集的typesselect“CNAME – 规范名称”。
-
对于Value,粘贴在我们在步骤3中创build的S3存储桶的Endpoint URL。
-
点击“创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服务,但是如果您决定将DNSpipe理迁移到Amazon Route 53,那么缺乏简单的URL转发可能会令人沮丧。 我希望这个指南能够帮助你更容易地为你的托pipe域设置URL转发。
如果您想了解更多信息,请参阅AWS文档站点的以下页面。
- 示例:使用自定义域设置静态网站
- 为网站托pipeconfiguration一个存储桶
- 创build使用路由53的域
- 创build,更改和删除资源logging
干杯!
AWS支持指出了一个更简单的解决scheme。 这与@Vivek M. Chawla提出的基本相同的想法有一个更简单的实现。
AWS S3:
- 创build一个名为你的完整域的桶,比如
aws.example.com
- 在存储区属性上,select
Redirect all requests to another host name
并input您的url:https://myaccount.signin.aws.amazon.com/console/
:https://myaccount.signin.aws.amazon.com/console/
AWS Route53:
- 创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.com
为aws.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设置的名称相匹配。