服务器只是一台装有 Web 服务器软件(如 nginx、apache 等)的机器。当我们在托管服务(如 GoDaddy 或云服务)中托管网站时,它们是否为部署的每个应用程序提供 Web 服务器软件,还是一台机器(服务器)只有一个 Web 服务器软件,每个应用程序都使用它,或者我们(客户端)需要设置 Web 服务器软件?
一个服务器可以有‘n’个 Web 服务器软件吗?
在 DNS 记录中,每个应用程序域的记录是否指向服务器的 IP 地址或 Web 服务器的 IP 地址?
如果一台服务器中的所有应用程序域都指向同一个 IP 地址,那么请求如何路由到特定的应用程序?
如果问题有任何错误,请指出,因为我对这些主题还不熟悉。
答案1
服务器只是一台装有 Web 服务器软件(如 nginx、apache 等)的机器。
不一定。服务器是用于服务其他系统(客户端)处理内容和数据(或者只是从其他来源获取)并返回给客户端。
如果它通过 HTTP 协议提供内容,那么它可能是一个 Web 服务器;如果它存储数据并允许以关系(SQL)或非关系方式进行数据操作,那么它可能是一个数据库服务器;如果它通过 DNS 协议提供有关主机名和 IP 地址的信息,那么它可能是一个 DNS 服务器,等等。
当我们在 GoDaddy 或云服务等托管服务中托管网站时,他们是否为部署的每个应用程序提供 Web 服务器软件,或者一台机器(服务器)只有一个 Web 服务器软件并且每个应用程序都使用它,或者我们(客户端)需要设置 Web 服务器软件?
视情况而定。有些提供预装了 Web 服务器(如 Apache)的虚拟机(或类似设备),您“仅”需要为您的应用程序正确配置它们。其他(AWS EC2)仅提供普通虚拟机,您必须安装和配置您可能需要的任何服务或包(包括 Web 服务器)。
一个服务器可以有‘n’个 Web 服务器软件吗?
是的。同一台服务器可以托管不同的 Web 服务器工具(例如 Apache和例如,可以使用多个 Nginx 来处理不同的应用程序),甚至可以使用同一种 Web 服务器技术的不同实例(例如通过容器),或者使用一个处理多个应用程序的单一 Web 服务器工具(可能使用虚拟主机)。
在 DNS 记录中,每个应用程序域的记录是否指向服务器的 IP 地址或 Web 服务器的 IP 地址?
它应该指向任何可从外部路由和访问的 IP 地址,并以某种方式“绑定”到 Web 服务器。一个简单的设置可能是具有单个 IP 地址的虚拟机和侦听该 IP 地址的 Web 服务器。但 Web 服务器也可以在内部侦听另一个地址,例如 127.0.0.1,并使用某种技术(如 NAT)接收以虚拟机 IP 地址作为目标地址的 HTTP 请求。等等。
如果一台服务器中的所有应用程序域都指向同一个 IP 地址,那么请求如何路由到特定的应用程序?
这可以通过多种方式实现。首先,您可以让不同的进程监听同一个 IP 地址,但监听不同的端口。只要端口不同,就不会发生冲突 -http://www.example.com:80将到达不同的 Web 服务器(或 Web 服务器实例)http://www.example.com:8080通过使用不同的端口并将每个端口绑定到一个进程或进程“实例”(例如虚拟主机),每个请求都会转发到正确的应用程序。
编辑
尝试回答评论中的其他问题。
如果多个应用程序部署在共享服务器而不是虚拟机上会怎么样?由于每个人都希望端口为 443(默认端口),如果应用程序使用 HTTPS,请求如何路由?域的 DNS 记录将指向什么 IP 地址?
如果多个应用程序侦听同一个端口和同一个 IP,则可以执行其他类型的流量操作。例如,假设同一个 IP 与三个应用程序绑定:
app1.example.com - 端口 443
app2.example.com - 端口 443
app3.example.com - 端口 443
如何将对同一 IP 地址和端口的 HTTP 请求重定向到正确的应用程序?一种方法是使用主机头。如果浏览器想要联系 app1.example.com,它将向同一 IP 和端口发送 HTTP 请求,并将 Host 标头设置为“app1.example.com”。反向代理将接受该请求,读取 Host 标头的值,并将该请求重定向到与“app1.example.com”关联的进程,即使该进程与其他 Web 服务器侦听相同的 IP 和端口。
另一种不同的方法依赖于使用具有多个 IP 地址的机器(虚拟机、裸机 - 无关紧要)。如果同一台机器有多个 IP 地址,它可以在相同端口但不同地址上托管不同的应用程序,而无需使用任何 HTTP 标头技巧。