初学者如何解释访问域名如何解析到网络服务器IP?

初学者如何解释访问域名如何解析到网络服务器IP?

我有一个 Apache Web 服务器,托管几个使用相同域名但不同子域的 Django 网站:

proj1.example.com
proj2.example.com
proj3.example.com

上述每个 apache 配置文件的开头都如下:

<VirtualHost *:80>
    ServerName proj1.example.com

假设服务器的外部 IP 是200.x.x.x,内部 IP 是10.x.x.x 如果我想向服务器添加新的子域名(proj4.example.com),我应该使用这两个 IP 中的哪一个?我通常进行 Web 开发和基本的 apache 配置,但除此之外,我仍不清楚接下来会发生什么。有人可以详细解释一下需要设置什么以及在为新站点设置 apache 配置文件后会发生什么吗?

答案1

为了快速回答您的问题,您不需要担心配置的 IP 地址,您只需担心域名/别名,因为 apache 将使用浏览器传递的 HTTP_HOST 标头。

<VirtualHost *:80>
    ServerName proj1.example.com
    DocumentRoot /path/to/proj1
</VirtualHost>
<VirtualHost *:80>
    ServerName proj2.example.com
    DocumentRoot /path/to/proj2
</VirtualHost>
<VirtualHost *:80>
    ServerName proj3.example.com
    DocumentRoot /path/to/proj3
</VirtualHost>

冗长的解释。

用 lamen 术语来说,这里有两件独立的事情发生。

  1. 将域名解析为 IP
  2. 向设置了虚拟主机的服务器发送 Web 请求

将域名解析为 IP

当浏览器被要求打开一个页面时,它首先会进行 DNS 查找 proj1.example.com。DNS 请求首先发送到根服务器,并询问“谁控制 example.com”,然后根服务器指向控制 .com 域的 DNS 服务器,并询问该 DNS 服务器“谁控制 example.com”,然后它发送到您的 DNS 服务器,并询问“proj1.example.com 的 IP 地址是什么”。您的 DNS 服务器会说“哦,那是 IP xxxx”,这是外部 IP 地址。浏览器会将请求发送到您的 IP,此时,您的路由器会将其转发到您的服务器(使用内部 IP 地址)。Web 服务器的 IP 地址不是 HTTP 请求/响应的一部分,因此不需要它。

从 Web 服务器请求内容

你的浏览器现在知道了该 IP 地址,并向你的 iP 发送请求。请求如下所示:

GET http://proj1.example.com/path/being/requested HTTP/1.0
Host: proj1.example.com
User-Agent: [blah blah blah]
Cookie: [cookie info]

响应如下

HTTP/1.0 200 OK
(new line)
<html>
...
</html>

Apache 通过主机/url 中的域名知道请求是针对哪个主机的,并相应地提取内容。

更多文档可以在这里找到: http://httpd.apache.org/docs/2.1/vhosts/name-based.html

注意:旧版本的 HTTP 协议不支持Host标头,因此,如果您想在同一台机器上设置虚拟主机,则必须使用多个 IP 地址,并将每个 IP 地址绑定到一个唯一的站点。网络上的一些文档可能仍反映了这一点。但一般来说,您不必担心这一点,因为现在所有浏览器都支持使用标Host

相关内容