Route 53 - 现有服务器上单个页面的特殊域
Route 53 - Special domain for a single page on existing server
我在 example-app.com 中有一个复杂的 Web 应用程序,完全托管在 AWS 上,使用 ELB 和用于 DNS 的 Route 53。这是一个 Rails 应用程序。
我是 运行 我在 rails 应用中使用的实验,位于 example-app.com/test。我想设置 new-domain-app.com,指向 example-app.com/test
,并将 URL 隐藏为始终是 new-domain-app.com。这是一个单页网站,因此不需要任何导航。
我在弄清楚如何在 Route 53 上设置我的 DNS 来实现这一点时遇到了很多麻烦。有人对这个 Route 53 配置应该是什么样子有好的想法吗?
DNS 知道域,而不是 url。 DNS 只是将名称转换为 IP 地址。
你不能只使用 DNS 和 ELB 做你要求的事情,但是,你可以做的是为 new-domain-app.com 设置一个单独的 VHOST 指向你的example-app.com 站点并使用某种仅针对 new-domain-app.com.
触发的重定向规则来完成您想要的操作
我不确定这是否属于 SO 问题,更可能是服务器故障问题。有关您的网络服务器和 OS 平台的详细信息将有助于获得更具体的建议。
所以这里有一些细节:
- 您已经 example-app.com 设置和工作
- 您创建一个 CNAME 条目,将 new-domain-app.com 指向 example-app.com,或者您可以创建一个指向相同 IP 的 A 记录。如果您已经将 example-app.com 指向不同的 IP 地址,请使用子域 (test.example-app.com) 将其隔离。
- 在您的服务器上设置一个新的虚拟主机,基本上复制 new-domain-app.com 的现有虚拟主机。您唯一需要更改的是服务器名称配置。
为什么这行得通?因为 HTTP 1.1 包含浏览器发送的 HOST header,并且 Web 服务器在虚拟主机中使用它来确定将传入请求路由到哪个虚拟主机。当它看到客户端浏览器想要 "example-app.com" 时,它会将请求路由到适当的虚拟主机。
不必做一些花哨的代理,当然可以用来获得类似的结果,您只需添加一个重定向规则来查找对主机 example-app.com 的请求并重定向这些请求到 example-app.com。在使用 mod_rewrite 的 apache 中,人们经常通过将规则放入无处不在的 .htacess 文件来使用它,但也可以在 nginx 和其他常见的 Web 服务器中完成。每个的具体细节略有不同。
你想做的事是不可能的。 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
指向该存储桶。
详情见以下内容:
AWS 提供了一种非常简单的方法来实现这一点——使用 CloudFront。忘记它作为 CDN 销售的事实。它也是一个反向代理,可以在路径前添加一个固定值,并向 back-end 服务器发送一个不同于输入浏览器的主机名,这听起来正是您所需要的。
创建 CloudFront Web 分配。
将新域名配置为分发的备用域名。
对于原始服务器,输入您现有的主机名。
对于 origin path,将 /test
- 或者您想要的任何字符串作为前缀添加到浏览器发送的路径中。
根据需要配置缓存行为 -- 启用查询字符串或 cookie 的转发(如果需要)以及您的应用希望看到的任何 header,但 Host
。
将您的新域名指向 CloudFront...但在此之前,请注意您的 CloudFront 分配有一个 dxxxexample.cloudfront.net 主机名。分发完成设置后("In Progress" 状态消失,通常在 5 到 20 分钟内)您的站点应该可以通过 cloudfront.net 主机名访问。
工作原理:当您在浏览器中键入 http://example.com
时,CloudFront 会将原始路径添加到浏览器发送的路径中,因此 GET / HTTP/1.1
变为 GET /test/ HTTP/1.1
。此配置只是在每个请求的路径前加上您指定为原始路径的字符串,并将其发送到服务器。浏览器地址栏不会改变,因为这不是重定向。浏览器发送的hostheader在向源站发送请求时替换为源站主机名
我在 example-app.com 中有一个复杂的 Web 应用程序,完全托管在 AWS 上,使用 ELB 和用于 DNS 的 Route 53。这是一个 Rails 应用程序。
我是 运行 我在 rails 应用中使用的实验,位于 example-app.com/test。我想设置 new-domain-app.com,指向 example-app.com/test
,并将 URL 隐藏为始终是 new-domain-app.com。这是一个单页网站,因此不需要任何导航。
我在弄清楚如何在 Route 53 上设置我的 DNS 来实现这一点时遇到了很多麻烦。有人对这个 Route 53 配置应该是什么样子有好的想法吗?
DNS 知道域,而不是 url。 DNS 只是将名称转换为 IP 地址。
你不能只使用 DNS 和 ELB 做你要求的事情,但是,你可以做的是为 new-domain-app.com 设置一个单独的 VHOST 指向你的example-app.com 站点并使用某种仅针对 new-domain-app.com.
触发的重定向规则来完成您想要的操作我不确定这是否属于 SO 问题,更可能是服务器故障问题。有关您的网络服务器和 OS 平台的详细信息将有助于获得更具体的建议。
所以这里有一些细节:
- 您已经 example-app.com 设置和工作
- 您创建一个 CNAME 条目,将 new-domain-app.com 指向 example-app.com,或者您可以创建一个指向相同 IP 的 A 记录。如果您已经将 example-app.com 指向不同的 IP 地址,请使用子域 (test.example-app.com) 将其隔离。
- 在您的服务器上设置一个新的虚拟主机,基本上复制 new-domain-app.com 的现有虚拟主机。您唯一需要更改的是服务器名称配置。
为什么这行得通?因为 HTTP 1.1 包含浏览器发送的 HOST header,并且 Web 服务器在虚拟主机中使用它来确定将传入请求路由到哪个虚拟主机。当它看到客户端浏览器想要 "example-app.com" 时,它会将请求路由到适当的虚拟主机。
不必做一些花哨的代理,当然可以用来获得类似的结果,您只需添加一个重定向规则来查找对主机 example-app.com 的请求并重定向这些请求到 example-app.com。在使用 mod_rewrite 的 apache 中,人们经常通过将规则放入无处不在的 .htacess 文件来使用它,但也可以在 nginx 和其他常见的 Web 服务器中完成。每个的具体细节略有不同。
你想做的事是不可能的。 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
指向该存储桶。
详情见以下内容:
AWS 提供了一种非常简单的方法来实现这一点——使用 CloudFront。忘记它作为 CDN 销售的事实。它也是一个反向代理,可以在路径前添加一个固定值,并向 back-end 服务器发送一个不同于输入浏览器的主机名,这听起来正是您所需要的。
创建 CloudFront Web 分配。
将新域名配置为分发的备用域名。
对于原始服务器,输入您现有的主机名。
对于 origin path,将
/test
- 或者您想要的任何字符串作为前缀添加到浏览器发送的路径中。根据需要配置缓存行为 -- 启用查询字符串或 cookie 的转发(如果需要)以及您的应用希望看到的任何 header,但
Host
。将您的新域名指向 CloudFront...但在此之前,请注意您的 CloudFront 分配有一个 dxxxexample.cloudfront.net 主机名。分发完成设置后("In Progress" 状态消失,通常在 5 到 20 分钟内)您的站点应该可以通过 cloudfront.net 主机名访问。
工作原理:当您在浏览器中键入 http://example.com
时,CloudFront 会将原始路径添加到浏览器发送的路径中,因此 GET / HTTP/1.1
变为 GET /test/ HTTP/1.1
。此配置只是在每个请求的路径前加上您指定为原始路径的字符串,并将其发送到服务器。浏览器地址栏不会改变,因为这不是重定向。浏览器发送的hostheader在向源站发送请求时替换为源站主机名