我们有两个外部服务器,Dev 和 Prod。我们是一家软件公司,在代码中我们有一个指向 Prod 的子域 metrics.company.com。
开发是持续进行的,我们的内部和外部开发人员和测试人员需要从开发切换到生产并再切换回来。在开发期间,代码中不能有不同的子域,而在生产中则不能更改。
我们希望在 Dev 和 Prod 之间切换的方式是使用 DNS。我们需要一个除了将 metrics.company.com 路由到 Dev 之外正常运行的公共 DNS 服务器。用户将能够来回切换他们的 DNS 以访问不同的服务器。
最简单的方法是什么?有没有公司提供这项服务,还是我必须租用服务器并自行设置?
任何帮助将非常感激。
答案1
我们的设置稍微复杂一些,有 DEV、TEST、BETA 和 PROD 环境。我认为我们的解决方案有一些额外的巧妙之处,它允许开发人员最初在他们的工作站上构建代码,然后部署,并使其工作而无需更改代码。
我们通过运行几个不同的内部 DNS 区域(具体来说是 dev.zfx、test.zfx、beta.zfx)以及多个 PROD 区域(每个数据中心一个)来实现这一点。然后,根据代码当前所在的环境,将 DNS 搜索列表配置为引用该区域第一的。因此,例如,他们将编写代码来引用http://blahfoo/page?paramaters=something
。在 DEV 机器上(或在他们的工作站上),这将解析为http://blahfoo.dev.zfx/page?parameters=something
。
有几点需要注意:
- 在任何情况下,都不要允许名称存在于这些区域中,只要这些名称存在于您的静态内部区域中即可。这些区域应仅包含这些发展级别类型的条目。
- 您必须与服务器管理员合作,以确保搜索列表配置为构建过程的一部分。当他们将一些代码块发布到他们的开发环境中时,您将无法享受生活,因为由于系统设置不正确,这些代码块会完全出错并杀死产品。
乍一看,它看起来有点笨拙,但过去五年来它确实运行良好。如果您还有其他问题,请随时告诉我。
答案2
为什么不更改您的 hosts 文件?确保您的浏览器理解更改,我需要为此重新启动 Firefox(这是合乎逻辑的,因为 FF(或 IE)中的解析器会重新启动)。
答案3
在代码中不能有不同的子域名
为什么这不是一个选项?我在开发过程中经常遇到这种情况,并使用一个单一的#define
(用 C 语言或使用的任何语言的等效语言)解决了“问题”,它设置了开发环境,并在生产版本中被注释掉。为这种事情而使用 DNS 不仅会引入不受欢迎且容易出错的复杂程度,而且应该是不必要的。
但是,如果您真的想实现这个奇怪的想法,为什么不直接设置一个额外的 DNS 服务器,其中包含您想要的开发版本区域信息,并告诉您的操作系统在任何特定时间使用所需的 DNS 服务器。
答案4
我会更改 DNS 服务器,而不是代码或 DNS 记录。
根据您的设置方式,您可以更改主机上的 resolv.conf、更改 DHCP 租约信息或更改您正在使用的 DNS 服务器的转发器。
设置两个 DNS 服务器来为您查找的记录提供权威性;一个 DNS 服务器具有开发 IP,另一个 DNS 服务器具有生产 IP。
只需保持两个服务器的 TTL 较短即可。