ServerName和ServerAlias如何工作?


62

这是虚拟主机配置的以下部分,我需要对其进行进一步说明:

<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了HTTP请求,然后向发出了HTTP请求mytestname.com,则必须有一个指向服务器IP的DNS记录才能起作用?在这种情况下,ServerAlias基本上是EXTRA ServerName项吗?

说我有一个DNS条目,以使得foobar.com = 141.29.495.999后来我ServerName = 141.29.495.999ServerAlias是空的,就意味着,虽然foob​​ar.com得到解决,以正确的IP,因为没有参考在接受foob​​ar.com ServerNameServerAlias

或者其他的东西。老兄,我很困惑。


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

Answers:


105

这样想:

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

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

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

预计到达时间:因此,请逐步进行正常连接:

  1. 您键入http://www.example.com您的浏览器。
  2. 您的计算机询问要与之对话的DNS解析器应使用哪个IP地址www.example.com
  3. 您的计算机连接到该IP地址,并说它想与之对话www.example.com(这是Host:HTTP中的标头)。
  4. 网络服务器会查看其配置,以弄清楚如何处理来自的内容请求www.example.com。可能发生以下任何一种情况:
    • www.example.com被列为一个ServerNameServerAlias一个VirtualHost-如果是这样,那么它将使用配置为虚拟主机提供的内容。
    • 服务器根本没有任何VirtualHosts-如果有的话,它将使用其httpd.conf中的配置来传递内容。
    • 该服务器具有VirtualHosts,但未www.example.com在其中列出-如果是这样,列表中的第一个Virtualhost将用于传递内容。

因此,如果HTTP请求的主机部分是www.example.com,则DNS将解析该名称的IP地址,而HTTP请求主机部分实际上将是IP;在到达服务器后,apache还将知道请求是请求的,www.example.com并且该域名是否存在ServerNameServerAlias指令,它可以服务于文档根目录吗?
njp

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

The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.。我测试了这个。没错,但是我不确定它是第一台Virtualhost。谢谢你的信息。+1
SMMousavi

19

如果您未定义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

0

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

它说:“如果在包含最特定的匹配IP地址和端口组合的虚拟主机集合中找不到匹配的ServerName或ServerAlias,则将使用将匹配的第一个列出的虚拟主机。” 。因此,在您的情况下,如果您访问“ foobar.com”,则httpd将使用以某种方式与IP 141.29.495.999匹配的第一个VirtualHost条目。

同一份文档中说:“许多服务器希望通过多个名称进行访问。这可以通过ServerAlias指令来实现。” 因此,您可以将ServerAlias视为其他ServerName条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.