ServerName和ServerAlias如何工作?

这是虚拟主机configuration的以下部分,我需要进一步说明:

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

这是和示例configuration,类似于我目前有(我没有一个域名的时刻)。

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

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

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

对于我来说,令人困惑的部分是,在上面的情况下,如果我设置ServerAlias mytestname.com ,然后向mytestname.com发出HTTP请求,那么必须有一个指向服务器IP的DNSlogging才能工作? 在这种情况下,ServerAlias只是基本上EXTRA ServerName条目?

说我有一个DNS条目,这样foobar.com = 141.29.495.999但后来我有ServerName = 141.29.495.999ServerAlias是空的,这意味着,虽然foobar.com被parsing到正确的IP,因为没有参考在ServerNameServerAlias接受foobar.com?

或者其他的东西。 男人我很困惑。

像这样想:

DNS是电话簿/黄页。 当有人想打电话给他们时,他们可以查看您的姓名,并获得您的电话号码并拨打该电话。 对于计算机,DNS也是一样 – 当有人想要访问www.example.com他们会询问DNS的IP地址,然后他们可以联系具有该IP地址的计算机。 这就是解决的意思。 parsingIP地址与Apache毫不相干; 这完全是一个DNS问题。

ServerNameServerAlias更像是公司的内部电话列表。 您的networking服务器是交换机; 它将接受到服务器的所有传入连接。 然后客户端/调用者会告诉他们他们正在寻找什么名字,并且会在Apacheconfiguration中查找如何处理这个名字。

如果该名称未在apacheconfiguration中列为ServerName / ServerAlias,则apache将始终为其列出第一个VirtualHost。 或者,如果不存在VirtualHost,则无论请求中给出的是什么主机名,它都会给出相同的内容。

ETA:所以,一步一步的正常连接:

  1. 您可以在浏览器中inputhttp://www.example.com
  2. 您的计算机向DNSparsing器请求在与www.example.com交谈时使用的IP地址。
  3. 您的计算机连接到该IP地址,并表示要与www.example.com (这是HTTP中的Host:头)交谈。
  4. networking服务器查看其configuration,找出如何处理来自www.example.com内容请求。 以下任何一种情况都可能发生:
    • www.example.com被列为ServerAliasServerNameServerAlias – 如果是,那么它将使用VirtualHost的configuration来传递内容。
    • 服务器根本没有任何虚拟主机 – 如果是的话,那么它将使用httpd.conf中的configuration来传递内容。
    • 服务器有VirtualHosts,但www.example.com没有列出其中的任何一个 – 如果是的话,列表中的第一个虚拟主机将被用来传递内容。

如果你没有定义ServerName,那么apache2将尝试从/ etc / hosts中猜测它。 ServerAlias是可选的。 最常见的用例是在哪里

 ServerName example.com ServerAlias www.example.com 

这取决于你(而不是apache2的工作),以确保请求到达Web服务器的IP,例如,注册一个域和设置DNSlogging。 这样做(testing和开发)没有域和DNSlogging一个非常常见的方式是设置您的本地计算机/ etc / hosts文件,以便example.com指向您的服务器的IP。

 192.168.0.12 example.com 192.168.0.12 www.example.com