我正在使用自定义域来在亚马逊S3上托管静态index.html.这一切都适用于我的域名:site.com.但是,当我访问www.site.com时,我收到了一个错误.根据我的理解,我需要将www URL重定向到裸URL.
似乎有几种方法可以做到这一点,但我对DNS的理解是有限的,听起来很多这些选项是不可取的.
选项
>有两个A记录,一个用www,一个没用.显然,这可能会导致搜索引擎优化问题,因为谷歌将把它作为重复内容.
>有一个重定向桶,所有都被路由通过.这可能会导致cloudfront出现问题.
https://stackoverflow.com/questions/10115799/set-up-dns-based-url-forwarding-in-amazon-route53
>使用PTR记录重定向 – 但显然这是不可取的.
How do I redirect www to non-www in Route53?
>因为我的名字是与godaddy,使用godaddy重定向:
https://support.google.com/blogger/answer/58317?hl=en
>使用像wwwizer这样的免费服务
http://wwwizer.com/naked-domain-redirect
>使用亚马逊桶重定向.这给了每个域需要两个桶的大问题,这意味着我只能有50个域而不是100个.这对我来说是一个问题.
http://i.stack.imgur.com/lqict.png
解决方法
选项2不会出于同样的原因 – 除了针对存储桶实际名称的请求之外,请求永远不会到达包含重定向规则的存储桶.您链接的答案仅仅是执行选项6的“困难方式”,并且每个主机名需要一个存储桶.
选项3没有用,因为PTR记录不会导致浏览器重定向.通常用于反向DNS,A PTR记录在此上下文中没有应用程序.
选项4 Go Daddy有一个名为“域名转发”和“子域名转发”的选项,但这意味着您必须让您的DNS由Go Daddy托管,而不仅仅是在那里注册您的域名(这些是两个不同的东西,通常但不一定,一起走).如果这就是您现在所拥有的,您可以将“www”子域名(www.example.com)“转发”到Go Daddy通过为www.example.com创建A或CNAME记录来完成的顶点(example.com)这指向他们自己的Web服务器,它生成HTTP 301或302重定向到http://example.com.如果您的DNS托管Go Daddy,而不是Route 53,那么这可能是最简单的选项,但如果您的DNS不是Go托管的爸爸,这个选项不可用.由于您使用域的顶点作为S3中的网站,我假设您的DNS托管路由53,这意味着这将无法正常工作.
选项5似乎是一个坏主意,在方程式中引入了不必要的第三方,但更重要的是,它解决了错误的问题.他们没有将www.example.com重定向到example.com,他们将example.com重定向到www.example.com.
对于每个AWS账户可用的有限数量的存储桶,选项6是一个不错的选择,具有您提到的缺点.
如果你拥有那么多不同的域,那么另一个选择就是在EC2中分配一个弹性IP地址(这样你就有了一个不会改变的静态端点IP地址),然后启动一个绑定到该IP地址的Micro实例,安装HAProxy就可以了. HAProxy实际上是为前端实际的Web服务器设计的,并且可以从外部对它们进行负载均衡,但它也具有生成重定向的能力.配置并不是非常复杂,HAProxy对cpu非常有效,所以我希望你能从Micro中获得大量工作,但如果流量必要的话,可以随时将其扩展到更大的实例.
您将在端口80上配置前端侦听器:
frontend main bind *:80
然后为每个域创建一个访问控制列表(acl)来监视“Host”http头中包含该主机名的请求…
acl www.example.com hdr(host) -i www.example.com
redirect prefix http://example.com if www.example.com
在DNS中,您将使用指向此Micro实例的公共弹性IP地址的A记录配置www.example.com.
使用此配置,路径将被保留,因此发送到任何路径的请求(如同http://www.example.com/foo/bar)将被HTTP 301重定向到另一个域上的完全相同的路径,例如http://example.com/foo/bar.
您可以使用在计算机上运行的实际Web服务器执行类似的操作,例如Nginx或Apache,但HAProxy是一个非常重负且轻量级的工具,似乎非常适合此类任务,并生成这样的重定向这是我在操作中使用它的一个方面.