Apache 如何知道要传递哪个域内容

Apache 如何知道要传递哪个域内容

我请求大家帮助我理解基础知识。

假设一台服务器有两个域名 aa.com 和 bb.com ,apache 如何理解需要传递哪些内容?

在 access.log 中,没有 domain 条目。那么请求是如何到达 Virtualhost 条目的?

答案1

HTTP 请求包含一个名为的标头字段,Host其中包含应应答的虚拟主机的名称。Apache 读取此字段并将请求映射到适当的虚拟主机。

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol,特别是Host:标题……

答案2

这很简单:假设有人在浏览器地址栏中输入 aa.com。然后浏览器开始对 aa.com 进行 DNS 查找,以找出要与哪个 IP 地址通信。例如,DNS 回答 8.8.8.8

然后,浏览器连接到端口 80 上的 8.8.8.8,并提交 GET 请求和其他 HTTP 标头字段。此 HTTP 标头字段之一是“HOST”。自 HTTP 1.1 以来,这是标头的“必备”部分。它包含用户在浏览器中输入的初始域名 (aa.com)。

您的 apache 服务器会获取 HOST 标头并尝试为此找到一个“命名虚拟主机”。如果 aa.com 有一个 VirtualHost,它会提供内容或执行您为此虚拟主机配置的任何操作。如果它找不到所请求域的 VirtualHost,它会提供其默认设置(同样,取决于您的配置)。

我希望,这是清楚且有帮助的。

您可以在这里了解更多相关信息:

W3 HTTP 标头字段定义

维基百科中有关 HTTP 标头的条目

现代网络浏览器的幕后

答案3

域名使用 htttp.conf 文件链接到网站目录。如果您在 centos 服务器上,conf 文件位于 /etc/httpd/httpd.conf。

我没有专业知识来指导您使用其他类型的操作系统上的 httpd.conf 文件。但我认为您可以轻松弄清楚。

在 httpd.conf 里面查看这些行。

<VirtualHost *:80>
 ServerAdmin [email protected]<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script><script async="" type="text/javascript" src="http://www.googletagservices.com/tag/js/check_359604.js"></script><iframe src="http://tpc.googlesyndication.com/safeframe/1-0-2/html/container.html" style="visibility: hidden; display: none !important;"></iframe>
 DocumentRoot /var/www/domain.com/public_html
 ServerName www.domain.com
 ServerAlias domain.com
 ErrorLog /var/www/domain.com/error.log
 CustomLog /var/www/domain.com/requests.log
</VirtualHost>

DocumentRoot:您应该在此处指定网站目录。ServerName:您的域名。

如果您想添加第二个网站,您可以像这样添加它们。您可以在此处遵循详细教程这里

希望这可以帮助。

相关内容