Apache中的ServerName指令(默认在配置文件的142行左右)设置了服务器用于辨识自己的主机名和端口号。就是说它后面的值是机器自己的主机名,可以带端口号。这主要用于创建重定向URL。比如,一个放置web服务器的主机名为simple.example.com ,但同时有一个DNS别名www.example.com 。而您希望web服务器更显著一点,您可以使用如下的指令:

 

ServerName www.example.com:80

 

当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会使用接受请求的那个端口。为了加强可靠性和可预测性,您应该使用ServerName显式的指定一个主机名和端口号。

 

这里的ServerName是全局的。

 

在<VirtualHost>段中的ServerName将是为了匹配这个虚拟主机。在这种情况下,配置文件中的 VirtualHost 指令将为每个虚拟主机配置不同的 serveradmin, servername, documentroot, errorlog, transferlog, customlog等参数。例如:

NameVirtualHost 172.20.30.40:80
NameVirtualHost 192.168.111.2:8080

<VirtualHost 172.20.30.40:80>
 ServerAdmin webmaster@mail.smallco.com
 DocumentRoot /groups/smallco/www
 ServerName www.smallco.com
 ErrorLog /groups/smallco/logs/error_log
 TransferLog /groups/smallco/logs/access_log
</VirtualHost>

<VirtualHost 192.168.111.2:8080>
 ServerAdmin webmaster@mail.baygroup.org
 DocumentRoot /groups/baygroup/www
 ServerName www.baygroup.org
 ErrorLog /groups/baygroup/logs/error_log
 TransferLog /groups/baygroup/logs/access_log
</VirtualHost>

VirtualHost的参数必须与NameVirtualHost的参数相符。

 

“ServerName www.smallco.com”就是虚拟主机的主机名,它将指向 172.20.30.40:80,前提是你在你域名的DNS中指定了该域名指向 172.20.30.40 。由于它在VirtualHost指令内(不同于全局ServerName),所以“虚拟主机(VirtualHost)”一词因此而来。

 

同样的,“ServerName www.baygroup.org”指向 192.168.111.2:8080 ,前提是你在你域名的DNS中指定了该域名指向 192.168.111.2 。

 

所以“ServerName”就是主机名。

 

 

 

          印第安

      2007年12月25日9:34:47