![DNS 服务器如何知道从 httpd.conf 中获取 ServerName,尽管它没有在“/etc/hosts”中配置](https://linux22.com/image/500843/DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E4%BB%8E%20httpd.conf%20%E4%B8%AD%E8%8E%B7%E5%8F%96%20ServerName%EF%BC%8C%E5%B0%BD%E7%AE%A1%E5%AE%83%E6%B2%A1%E6%9C%89%E5%9C%A8%E2%80%9C%2Fetc%2Fhosts%E2%80%9D%E4%B8%AD%E9%85%8D%E7%BD%AE.png)
我只是不明白我的浏览器如何能够路由到正确的路径....当我给出虚拟主机的 ServerName 时....即使它没有在“/etc/hosts”中配置
请解释一下.....
我正在谈论的就是 Virtualhost
<VirtualHost *:80>
ServerName example.com
ServerAlias example
DocumentRoot "<*path*>"
RailsEnv development
<Directory "<*path*>"
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
答案1
DNS 服务器未从 httpd.conf 中获取 ServerName
您的浏览器不会路由请求,Web 服务器会根据浏览器发送的主机 HTTP 标头返回正确的页面。
当您在浏览器中输入 URL 并按回车键时,名称将使用 DNS 解析为 IP,然后浏览器向 DNS 查询返回的 IP 发送 HTTP 请求。
HTTP 标头构成 HTTP 请求的核心。其中之一是您在浏览器中输入的主机或域名。
使用示例虚拟主机定义。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com
</VirtualHost>
虚拟主机配置中的 ServerName 指令与 Host HTTP 标头匹配。因此,如果您输入
http://example.com
Apache 将接收请求并尝试匹配 Host 标头
Host: example.com
及其虚拟主机定义。如果找到匹配项,它将使用
DocumentRoot
在上面的例子中
/var/www/example.com
这可以是配置中定义的索引文件,也可以是目录索引(如果允许)。
答案2
我相信它实际上是从你的操作系统存储主机名的地方获取的,Ubuntu 上的 /etc/hostname 或 RH 类型发行版下的 /etc/sysconfig/network
hostname
在安装过程中,我认为它通过运行命令来填写 ServerName