【问题标题】:Can I set up a CNAME catch-all redirect from one subdomain level to a higher subdomain?我可以设置从一个子域级别到更高子域的 CNAME 包罗万象的重定向吗?
【发布时间】:2015-08-26 05:29:01
【问题描述】:

我在 Route53 for AWS 中为环境设置了数百个子域,如下所示:

<appX>.dev.internalurl.us
<appX>.qa.internalurl.us
<appX>.pt.internalurl.us
<appX>.internalurl.us

问题是我们的生产内部 url 缺少 url 中的“prod”环境,这需要我们向所有配置脚本添加条件,例如:

如果是“产品”在网址中: url = url.substring('prod.', '')

我想要的是:

<appX>.prod.internalurl.us to go to <appX>.internalurl.us automatically.

编辑:

我添加了一个 CNAME 来将 prod.internalurl.us 路由到 internalurl.us,如下所示:

*.prod.internalurl.us > internalurl.us

但这显然行不通,因为我需要在通配符上设置一个捕获组!它忽略了第一个“appX”子域。

我不想输入数百个 CNAME,所以我正在寻找一个包罗万象的重定向,将一个子域级别重定向到其父级。

有没有办法使用 CNAME 来做到这一点,还是需要在 prod.internalurl.us 上运行 nginx 代理才能完成这项工作?

【问题讨论】:

  • 这是个有趣的问题!
  • 我们需要澄清您想要的最终结果。 CNAME 或 DNS 中的任何其他内容都不会改变浏览器发送到服务器的内容。 foo.example.com CNAME foo.prod.example.com 仍然会导致 original 主机名 (foo.example.com) 输入到浏览器中(或在链接中提供,或与 curl 一起使用等) 以在标头中发送到 Web 服务器。你能澄清你的目的吗?
  • 问题解决了吗?
  • @Anatoly 谢谢,直到现在我才看到这个答案。经过一番摆弄,我编辑了我的问题以反映我真正在寻找什么。仍然没有找到解决方案,但主要是因为我已经走神了。

标签: amazon-web-services nginx cname amazon-route53


【解决方案1】:

可能有帮助的解决方案很简单。为了找出答案,让我问一个问题。为什么在 DNS 级别需要此功能?

我想要的是:

.prod.internalurl.us 去 .internalurl.us 自动。

CNAME 对条件 URL 重写没有帮助,该层没有这样的逻辑。有帮助的是可以通过 Nginx 管理 HTTP 层 301 重定向:

server {
  server_name  ~^(?<app>.+)\.prod\.internalurl\.us$;
  return       301 http://$app.internalurl.us$request_uri;
}

没有代理,而是 HTTP 301 重定向。

【讨论】:

  • 谢谢,编辑了我的问题并进行了澄清。您似乎在这里说的是,“不,CNAME 不能这样做。您需要专门为此用例设置代理服务器。”对吗?
  • 我认为重点是,您可以使用 CNAME 记录,但您不需要。如果你有包罗万象的 dns 设置,你可以将你的服务器配置为对任何子域请求做任何你想做的事情,而不必担心一直编辑你的 dns。
  • @putnamhill 很遗憾,您的评论完全不清楚。
  • @Anatoly,谢谢你成功了!我不需要通过 DNS 的功能.. 但最初认为 DNS 将是最简单的方法。这当然很容易。
猜你喜欢
  • 2011-08-02
  • 2011-11-07
  • 2018-04-23
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2019-01-12
  • 2013-08-04
相关资源
最近更新 更多