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

Sau*_*rav 134 dns forwarding amazon-route53

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

Route53是否支持此功能?

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

Viv*_*wla 317

我遇到了Saurav描述的完全相同的问题,但我真的需要找到一个除了Route 53和S3之外不需要任何其他解决方案的解决方案.我为我的博客创建了一个操作指南,详细说明了我的工作.

这就是我想出的.


目的

仅使用Amazon S3和Amazon Route 53中提供的工具,创建一个URL重定向,自动将http://url-redirect-example.vivekmchawla.com转发到位于https的 "MyAccount"别名的AWS控制台登录页面://myaccount.signin.aws.amazon.com/console/.

本指南将教您如何设置URL转发到任何URL,而不仅仅是来自亚马逊的URL.您将学习如何设置转发到特定文件夹(例如我的示例中的"/ console"),以及如何将重定向的协议从HTTP更改为HTTPS(反之亦然).


第一步:创建S3存储桶

打开S3管理控制台并单击

打开S3管理控制台,然后单击"创建存储桶".


第二步:命名你的S3 Bucket

命名您的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>
    
    Run Code Online (Sandbox Code Playgroud)

如果您对上述XML的作用感到好奇,请访问AWM文档"指定路由规则的语法".例如,奖励技术(此处未涉及)转发到目的地主机处的特定页面http://redirect-destination.com/console/special-page.html.<ReplaceKeyWith>如果需要此功能,请阅读有关该元素的信息.


第4步:记下您的重定向存储桶的"端点"

记下您的重定向存储桶的端点

记下亚马逊为此存储桶自动创建的静态网站托管"端点".您稍后需要此功能,因此请突出显示整个网址,然后将其复制并粘贴到记事本中.

警告!此时,您实际上可以单击此链接以检查您的重定向规则是否输入正确,但要小心!这就是为什么......

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

在注意到您的错误后,您可能会<Hostname>在重定向规则中编辑以修复错误.不幸的是,当您尝试再次单击该链接时,您最有可能最终被重定向回错误的地址!即使您修复了该<Hostname>条目,您的浏览器也会缓存之前的(不正确的!)条目.这是因为我们正在使用HTTP 301(永久)重定向,Chrome和Firefox等浏览器默认会缓存.

如果您将端点URL复制并粘贴到其他浏览器(或清除当前缓存中的缓存),您将有另一次机会查看更新的<Hostname>条目是否最终是正确的.

为安全起见,如果您要测试终结点网址和重定向规则,则应打开隐私浏览会话,例如Chrome中的"隐身模式".在隐身模式下复制,粘贴和测试端点URL,一旦关闭会话,任何缓存的内容都将消失.


步骤5:打开Route53管理控制台并转到托管区域的记录集(域名)

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

  1. 选择您在创建存储桶时使用的托管区域(域名).由于我将我的桶命名为"url-redirect-example.vivekmchawla.com",我将选择vivekmchawla.com托管区域.
  2. 单击"转到记录集"按钮.

第6步:单击"创建记录集"按钮

单击

单击"创建记录集"将打开Route53管理控制台右侧的"创建记录集"窗口.


第7步:创建CNAME记录集

创建CNAME记录集

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

  2. 为此记录集的类型选择"CNAME - Canonical name".

  3. 对于Value,粘贴我们在步骤3中创建的S3存储桶的端点URL.

  4. 单击"创建记录集"按钮.假设没有错误,您现在可以在托管区域的记录集列表中看到新的CNAME记录.


第8步:测试新的URL重定向

打开一个新的浏览器选项卡,然后输入我们刚刚设置的URL.对我来说,那是http://url-redirect-example.vivekmchawla.com.如果一切正常,您应该直接发送到AWS登录页面.

因为我们使用myaccount.signin.aws.amazon.com别名作为我们的重定向目标网址,所以亚马逊确切地知道我们正在尝试访问哪个帐户,并直接将我们带到那里.如果您想为员工或承包商提供简短,干净,品牌的AWS登录链接,这将非常方便.

全部完成! 您的URL转发应带您进入AWS登录页面.


结论

我个人喜欢各种AWS服务,但如果您决定将DNS管理迁移到Amazon Route 53,那么缺少简单的URL转发可能会令人沮丧.我希望本指南有助于为托管区域设置URL转发更容易一些.

如果您想了解更多信息,请查看AWS文档站点中的以下页面.

干杯!

  • 注意::对于那些想要根域重定向的人:example.org - > example.com - 除了使用启用了"Alias:Yes"的A Record之外,一切都一样.然后选择桶作为目标. (22认同)
  • 在bucker选项下有一个新选项"将所有请求重定向到另一个主机名".我在其中放入了IAM登录URL,它就像一个魅力,不需要XML. (17认同)
  • +1这个完全智能的解决方案 - 非常感谢花时间编写这样一个史诗般的分步指南,我已经更新了[我的答案](http://stackoverflow.com/a/10121343/45773)来引用未来读者相应的! (14认同)
  • 好的解决方案 但我遇到了使用https作为原始网址的问题.如果我正在重定向的存储桶是dev.example.com,则重定向适用于http:// dev.example.com,但对于https:// dev.example.com则失败.我还没有找到解决这个问题的方法. (10认同)
  • @Greg我认为这可能与亚马逊如何为S3处理HTTPS有关.遗憾的是,当使用CNAME访问S3存储桶时,您无法通过添加"https"强制使用SSL,因为Amazon未托管"*.example.com"的证书.由于S3不允许连接,我们永远不会进入重定向逻辑.不幸的是,我无法看到解决方法. (4认同)
  • 谢谢,Steffen!我很感激反馈!这是我的第一个StackOverflow答案.你可以想象我是多么惊讶,写完这一切之后,我甚至无法发布它,因为我没有足够的代表来发布超过两个图像的答案!呵呵呵......啊,回忆.:-) (2认同)
  • 这可以通过https还是现在来完成吗? (2认同)
  • 步骤3.2:忘记"启用网站托管"并直接选择"将所有请求重定向到另一个主机名". (2认同)
  • 任何HTTPS解决方案?试图将https://domain.com指向https://www.domain.com.我得到<Code> AccessDenied </ Code>错误 (2认同)
  • 如果您在AWS中设置三层系统,那么您现在可以完全执行HTTPS.现在,这对于进行重定向变得相当荒谬,但S3存储桶可以进行如上所述的重定向.如果您想进行HTTP - > HTTPS重定向,您实际上可以使用Amazon Cloudfront执行此操作,Amazon Cloudfront将使用Amazon Certificate Manager生成的免费HTTPS证书.最终系统的Route 53连接到Cloud Front(处理https流量),连接到S3,后者执行重定向. (2认同)
  • @mlissner 对于应该如此简单的事情来说,它似乎如此复杂。 (2认同)

Rob*_*ers 140

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将域重定向到另一个域?

  • 这应该是最好的答案. (14认同)
  • 这适用于HTTP,但不适用于HTTPS. (13认同)
  • 这个“将所有请求重定向到另一个主机名”选项仍然存在吗?当我进入存储桶属性时我看不到它。 (2认同)
  • 精彩的。与 HTTPS 配合使用。 (2认同)

Vin*_*Mac 11

我能够使用nginx处理301重定向到aws登录页面.

转到你的nginx conf文件夹(在我的情况下/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;
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是nginx,您很可能会有其他服务器块(apache术语中的虚拟主机)来处理您的区域顶点(example.com),或者您已经设置了它.确保将其中一个设置为默认服务器.

server {
  listen 80 default_server;
  server_name example.com;
  # rest of config ...
}
Run Code Online (Sandbox Code Playgroud)

在Route 53中,添加A recordfor aws.example.com并将值设置为用于区域顶点的相同IP.


Ste*_*pel 9

更新

虽然我在下面的原始答案仍然有效,并且可能有助于了解基于DNS的URL转发无法通过Amazon Route 53开箱即用的原因,但我强烈建议您查看Vivek M. Chawla的完全智能间接解决方案,同时介绍Amazon S3对网站的支持重定向和实现自包含服务器较少,因此只在AWS中实现免费解决方案.

  • 实现自动化解决方案以生成此类重定向是留给读者的练习,但请通过发布您的解决方案向Vivek的史诗答案致敬;)

原始答案

Nettica必须为此运行自定义重定向解决方案,这是问题所在:

您可以创建一个CNAME别名一样aws.example.commyaccount.signin.aws.amazon.com,但是,DNS提供了一个别名子目录一样,没有官方的支持,console在这个例子中.

  • 遗憾的是,在点击https://myaccount.signin.aws.amazon.com/(我刚尝试过)时,AWS似乎并不是默认执行此操作,因为它会立即解决您的问题,并且首先会有很多意义; 此外,它们应该很容易配置.

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

因此,要实现相同的结果,您需要运行执行这些重定向的HTTP服务,这当然不是人们希望的简单解决方案.也许/希望有人可以提出一个更聪明的方法.

  • CNAME是别名,不会重定向. (3认同)