我在example-app.com上有一个复杂的网络应用程序,使用ELB和Route 53 for DNS完全托管在AWS上。这是一个Rails应用程序。
我正在运行我在rails应用中使用的实验,例如:example-app.com/test。我想设置new-domain-app.com,指向example-app.com/test
,并将URL cloacked始终为new-domain-app.com。这是一个单页网站,因此不需要任何导航。
我在确定如何在Route 53上设置DNS以实现此目标时遇到了很多麻烦。有没有人对Route 53的配置看起来有什么好主意?
答案 0 :(得分:1)
你想做的事是不可能的。 Route53是一个DNS系统,您无法使用DNS配置主机名(例如new-domain-app.com
)以指向URL(例如http://example-app.com/test
)。
但是,您可能正在使用错误的工具来完成工作。如果example-app.com/test
确实是一个简单的静态单页网站,那么您不需要在Rails应用程序中托管它。相反,您可以将其托管在AWS S3存储桶上,然后您可以使用Route53将new-domain-app.com
指向该存储桶。
有关详细信息,请参阅以下内容:
答案 1 :(得分:1)
AWS提供了一种非常简单的方法来实现这一点 - 使用CloudFront。忘记它作为CDN销售的事实。它也是一个反向代理,可以在路径上添加一个固定值,并向后端服务器发送一个不同于键入浏览器的主机名,这听起来就像你需要的那样。
创建CloudFront Web分配。
将新域名配置为分发的备用域名。
对于源服务器,请输入现有的主机名。
对于origin path,将/test
- 或任何您想要的字符串添加到浏览器发送的路径上。
根据需要配置缓存行为 - 根据需要启用转发查询字符串或Cookie以及应用希望查看的任何标头,但不能Host
。
将您的新域名指向CloudFront ...但在此之前,请注意您的CloudFront分配包含dxxxexample.cloudfront.net主机名。分发完成设置后(“进行中”状态消失,通常在5到20分钟内),您的站点应该可以通过cloudfront.net主机名访问。
工作原理:当您在浏览器中输入http://example.com
时,CloudFront会将原始路径添加到浏览器发送的路径中,因此GET / HTTP/1.1
变为GET /test/ HTTP/1.1
。此配置只是在每个请求的路径前面加上您指定为原始路径的字符串,并将其发送到服务器。浏览器地址栏不会更改,因为这不是重定向。当请求发送到源时,浏览器发送的主机头将替换为源服务器的主机名。
答案 2 :(得分:0)
DNS知道域名,而不是网址。 DNS只是将名称转换为IP地址。
你不能做你只想使用DNS和ELB的要求,但是,你可以做的是为new-domain-app.com分别指向你的example-app.com网站并完成的VHOST您想要使用某种仅针对new-domain-app.com触发的重定向规则。
我不确定这是否属于SO问题,更可能是服务器故障问题。有关您的网络服务器和操作系统平台的细节将有助于获得更具体的建议。
所以这里有一些细节:
为什么这样做?因为HTTP 1.1包含浏览器发送的HOST标头,并且Web服务器在虚拟环境中使用以确定将传入请求路由到哪个虚拟主机。当它发现客户端浏览器需要“example-app.com”时,它会将请求路由到适当的vhost。
您可以添加一个重定向规则来查找主机example-app.com的请求并将其重定向到example-app,而不必进行某些花哨的代理(当然可以用来获得类似的结果) .COM。在使用mod_rewrite的apache中,人们经常通过将规则放在无处不在的.htacess文件中来使用,但也可以在nginx和其他常见的Web服务器中完成。具体情况略有不同。