<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.999
或ServerName = 141.29.495.999
中没有引用接受foobar.com的内容。或其他内容。老兄,我很困惑。
#1 楼
这样想:DNS是电话目录/黄页。当某人想拨打您的电话时,他们可以查询您的姓名并获取您的电话号码并拨打该电话。 DNS的作用与之相同,但对于计算机而言,DNS的用途是相同的-当有人要访问
www.example.com
时,他们会向DNS询问IP地址,然后他们可以联系具有该IP地址的计算机。那就是决心的意思。解析IP地址与Apache无关。 ServerName
和ServerAlias
更像是公司的内部电话列表。您的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
被列为ServerName
或ServerAlias
(对于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条目。
评论
您在倒数第二段中忘记了一些单词。 :-)