我们有两个外部服务器,Dev和Prod。 我们是一个软件公司,在代码中我们有一个指向Prod的子域metrics.company.com。
开发是连续的,我们的内部和外部开发人员和testing人员将需要从Dev切换到Prod,然后再返回。 在开发过程中,不能在代码中使用不同的子域,并将其更改为生产。
我们希望在Dev和Prod之间切换的方式是使用DNS。 我们需要一个公共DNS服务器,除了将metrics.company.com路由到Dev之外,其行为通常是正常的。 用户将能够交换他们的DNS回来,并击中不同的服务器。
什么是最简单的方法来做到这一点? 有一家公司承载这项服务,或者我将不得不租用一台服务器并自行设置它?
任何帮助将非常感激。
我们有一个更复杂的设置,有DEV,TEST,BETA和PROD环境。 我提出了一些额外的狡猾点来提出我们的解决scheme,它允许开发人员在他们的工作站上初始构build他们的代码,进行部署,并在不改变代码的情况下工作。
我们通过运行几个不同的内部DNS区域,具体来说是dev.zfx,test.zfx,beta.zfx,然后是多个PROD区域,每个数据中心一个。 然后,根据其代码当前所在的环境,将DNSsearch列表configuration为首先引用该区域。 所以,例如,他们会编写代码来引用http://blahfoo/page?paramaters=something 。 在DEV机器上(或在他们的工作站上),这将parsing为http://blahfoo.dev.zfx/page?parameters=something 。
有几个警告:
乍看之下,这看起来有点笨拙,但在过去的五年里效果很好。 如果您有任何其他问题,只是lmk。
为什么不改变你的主机文件? 确保您的浏览器了解更改,我需要重新启动Firefox(这是qiute逻辑,因为然后parsing器在FF(或IE)重新启动)。
在代码中有一个不同的子域是不可选的
为什么不是一个选项? 我在开发和解决“问题”时,经常会遇到这样的问题,使用单一的#define (使用C语言,或者使用任何语言的同等语言),这就为开发环境设定了开发环境,并简单地对生产版本进行了注释。 用这种东西填充DNS不仅会引入一个不希望的,容易出错的复杂程度,应该是不必要的。
但是,如果你真的想追求这个奇怪的想法,为什么不build立一个额外的DNS服务器,与你想要的开发版本的区域信息,并告诉你的操作系统在任何特定的时间要求使用任何DNS服务器。
用DNS服务器可能会遇到麻烦。 所有DNSlogging都附有TTL(生存时间),客户端(和中间DNS服务器)将caching当时的名称logging,因此他们不必一直查询DNS服务器。 在此期间,旧logging将被重新使用,除非您a)强制客户端丢弃其caching,并b)确保您直接向该域查询授权服务器(否则,您的默认DNS服务器将提供cachinglogging你无法控制)。
一个更容易的情况是可能为这些域/子域添加特定的logging到你的本地主机文件(在Windows下,这通常在C:\ Windows \ system32 \ drivers \ etc \下,在linux下它在/ etc /中)。 用户可以简单地(不)评论他们需要从一台服务器切换到另一台服务器的线路。
说了这样的话,子域不能作为运行时选项来实现似乎是一件很奇怪的事情。
我会更改DNS服务器,而不是代码或DNSlogging。
根据您设置的方式,您可以更改主机上的resolv.conf,更改DHCP租赁信息,或者更改您使用的DNS服务器的转发器。
设置两个DNS服务器来查找您正在查找的logging的权威信息; 一台DNS服务器具有开发IP,另一台DNS服务器拥有产品IP。
只要保持两个服务器的TTL短。
如果您可以将DNS设置为非现场,则可以使用CloudFlare for DNS。 您可以定义非常短的TTL,如果您通过CDN路由网站,DNS更改是即时的,因为它基本上只是其代理的configuration。
/ Michael