这是虚拟主机配置的以下部分,需要进一步阐明:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin example@example.com
  ServerName  141.29.495.999
  ServerAlias example.com
...


这是示例配置,类似于我目前拥有的配置(我没有现在有一个域名。)

<VirtualHost *:80>-为在端口80上可以与该服务器联系的IP发出的所有HTTP请求允许以下设置。例如,如果可以在多个IP上访问服务器,则可以将此指令限制为仅一个而不是两个。

ServerName-如果HTTP请求的主机部分与此名称匹配,则允许请求。通常,这是一个映射到IP的域名,但是在这种情况下,HTTP请求主机必须与此IP匹配。

ServerAlias-服务器接受的备用名称。

对于我来说,令人困惑的部分是,在上述情况下,如果我设置ServerAlias mytestname.com,然后向mytestname.com发出HTTP请求,那么必须有一个指向服务器IP的DNS记录才能起作用?在这种情况下,ServerAlias基本上是EXTRA ServerName条目吗?正确的IP,因为在foobar.com = 141.29.495.999ServerName = 141.29.495.999中没有引用接受foobar.com的内容。

或其他内容。老兄,我很困惑。

评论

您在倒数第二段中忘记了一些单词。 :-)

#1 楼

这样想:

DNS是电话目录/黄页。当某人想拨打您的电话时,他们可以查询您的姓名并获取您的电话号码并拨打该电话。 DNS的作用与之相同,但对于计算机而言,DNS的用途是相同的-当有人要访问www.example.com时,他们会向DNS询问IP地址,然后他们可以联系具有该IP地址的计算机。那就是决心的意思。解析IP地址与Apache无关。

ServerNameServerAlias更像是公司的内部电话列表。您的Web服务器是总机;它将接受所有到服务器的传入连接。然后,客户端/呼叫者将告诉他们所要查找的名称,然后它将在Apache配置中查找如何处理该名称。

如果该名称未列为ServerName /在apache配置中的ServerAlias中,apache总是会给他们列出的第一个VirtualHost。或者,如果根本没有VirtualHost,则无论请求中指定了什么主机名,它都将提供相同的内容。

ETA:因此,逐步进行正常连接: br />
您在浏览器中键入http://www.example.com
您的计算机询问其DNS解析器在与www.example.com通话时应使用哪个IP地址。
您的计算机连接到该IP地址,并说它想与www.example.com(HTTP中的Host:标头)进行对话。
Web服务器查看其配置以弄清楚如何处理来自www.example.com的内容请求。可能发生以下任何一种情况:




www.example.com被列为ServerNameServerAlias(对于VirtualHost)-如果是这样,则它将使用该VirtualHost的配置进行交付内容。
服务器根本没有任何VirtualHosts-如果有,则它将使用其httpd.conf中的配置来传递内容。
该服务器具有VirtualHosts,但未在其中列出www.example.com-如果是这样,则列表中的第一个Virtualhost将用于传递内容。




评论


因此,如果HTTP请求的主机部分是www.example.com,则DNS将解析该名称的IP地址,而HTTP请求主机部分实际上是IP。在到达服务器后,apache还将知道该请求要求输入www.example.com,并且该域名是否有ServerName或ServerAlias指令,它可以为文档根服务吗?

–njp
13年7月2日在14:26

否-HTTP请求部分仍然是主机名。我再澄清一点。

–珍妮D
13年7月2日在14:45

该服务器具有VirtualHosts,但其中未列出www.example.com-如果是这样,则列表中的第一个Virtualhost将用于传递内容。.我对此进行了测试。没错,但是我不确定它是第一台Virtualhost。感谢您提供信息。 +1

– S.M. Mousavi
16-4-27在11:43



#2 楼

如果未定义ServerName,则apache2将尝试从/ etc / hosts猜测它。 ServerAlias是可选的。最常见的用例是

ServerName example.com
ServerAlias www.example.com


(由您决定(不是apache2的工作))由您来确保请求到达Web服务器IP,例如,注册域和设置DNS记录。没有域和dns记录的一种非常普通的方法(用于测试和开发)是设置本地计算机的/ etc / hosts文件,以便example.com指向服务器的IP。

192.168.0.12 example.com
192.168.0.12 www.example.com


#3 楼

我强烈建议您阅读有关该主题的官方文档:https://httpd.apache.org/docs/2.4/vhosts/name-based.html

它说“如果没有匹配的ServerName或在包含最特定的匹配IP地址和端口组合的虚拟主机集合中找到ServerAlias,然后在列出的第一个将使用的虚拟主机中找到ServerAlias。” 。因此,在您的情况下,如果您访问“ foobar.com”,则httpd

将使用与IP 141.29.495.999匹配的第一个VirtualHost条目。同一文档显示“许多服务器希望通过一个以上的名称。使用ServerAlias指令可以做到这一点。”因此,您可以将ServerAlias仅仅视为其他ServerName条目。