反向代理服务器如何接收子域名?

反向代理服务器如何接收子域名?

我最近使用 Nginx 在一些 Docker 容器上设置了一个反向代理服务器,它按预期工作。我将这些容器本身反向代理到在这些容器上运行的应用程序。

我只是不明白服务器如何接收子域来决定将请求路由到哪里。

据我所知,每个域名都由 DNS 服务器解析并返回服务器的 IP 地址,因此客户端可以使用收到的 IP 连接到目标服务器。但显然客户端也会将域名附加到请求中,这可能吗?

我对此没有明确的解释,因为从我的角度来看,客户端使用 IP 而不是域连接到目标服务器。

答案1

Host:使用了标头。

当任何 Web 浏览器发出 GET 请求来加载网页时,它都会发送一个Host:标头,Web 服务器可以使用该标头进行基于名称的虚拟托管和反向代理等操作。

虽然 Nginx 有一些关于其工作原理的文档,标题为“基于名称的虚拟服务器”我发现基于名称的虚拟主机的 Apache 文档更清楚地解释了这一切是如何运作的:

“如果请求包含Host:标头字段,则会在列表中搜索第一个具有匹配ServerName或的虚拟主机ServerAlias,并从该虚拟主机提供请求。Host:标头字段可以包含端口号,但 Apache 始终会忽略它并与客户端发送请求的实际端口进行匹配。”

因此,一切都归结为Host:标题:

  • DNS 解析:DNS提供目标主机的IP地址。
  • 主机头:发出的请求本身具有Host:标头,然后由接收 Web 服务器解释该标头以采取行动...或忽略...它只是一个可以使用的标头。

相关内容