在公司测试环境中如何通过域名访问服务器

66次阅读
没有评论

问题描述

作为一名Web开发人员,在公司的测试环境中,我们有多个服务器用于测试已部署的应用程序。为了部署我们的应用程序,我们通常通过SSH连接到某个特定的服务器,并在其中运行一个进程,通常命名为pm2,这些进程的命名可能是类似b2-dev-appb1-dev-app的形式,其中b部分是根据某个列表定义的,存在许多可能的名称。然后,应用程序可以通过预定义的端口进行访问。我们可以通过浏览器或Postman访问这些应用程序,其链接类似于https://b2-dev.ourapp.app

问题是这是如何工作的

从我的网络知识来看,我猜想即使在公司VPN之外也可以访问所有这些名称,这些名称都在全局DNS中注册,但服务器实际上只有一个IP地址,所有这些域名都指向相同的IP地址(通过一些在线IP查找工具进行了验证),这是我以前没有见过的。如果有帮助的话,我相当肯定这个应用程序是由Nginx作为反向代理服务器提供的,而且还涉及Docker。

注:尽管我尝试向同事询问,但由于超出了我的工作范围,我没有获得相关信息,也没有足够的权限访问这些信息。

解决方案

解释域名访问和DNS

首先,让我们来解释一下这种通过域名访问的机制以及与DNS(域名解析系统)相关的概念。当你通过域名访问一个网站时,例如https://b2-dev.ourapp.app,实际上涉及到DNS的解析过程。DNS会将这个域名解析为IP地址,以便你的计算机能够找到正确的服务器来获取网页内容。

在你描述的情况下,这些服务器似乎都共享了一个IP地址,但根据不同的子域名(如b2-dev.ourapp.app)来提供不同的应用程序。这是通过一种叫做”通配符DNS记录”的机制来实现的。

通配符DNS记录

通配符DNS记录允许你使用通配符(*)来匹配子域名的部分,从而将多个子域名映射到同一个IP地址。在你的情况下,可能存在一个通配符DNS记录,类似于*.ourapp.app,将所有的b1-dev.ourapp.appb2-dev.ourapp.app等子域名都解析到同一个IP地址上。

Nginx作为反向代理

另一个关键的组件是Nginx。Nginx不仅可以充当Web服务器,还可以作为反向代理服务器。在这种情况下,Nginx接收到来自不同子域名的请求,并根据请求中的Host头部信息(例如Host: b2-dev.ourapp.app)将请求转发到不同的后端服务器。这使得多个应用程序可以共享同一个IP地址,并根据不同的域名进行区分。

总结

所以,简而言之,这种通过域名访问服务器的机制涉及到以下几个关键因素:
1. 通配符DNS记录(*.ourapp.app)将所有子域名解析到同一个IP地址。
2. Nginx作为反向代理服务器,根据请求中的域名将请求转发到不同的后端服务器上,从而使不同的应用程序能够共享同一个IP地址。

请注意,上述解决方案基于你提供的信息和我们的推测。实际的实现可能会根据公司的具体网络设置和配置有所不同。

正文完