当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相 匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的<VirtualHost>配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。 如果找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
综上所述,第一个列出的虚拟主机在这里充当了默认虚拟主机的角色。
当一个IP地址与NameVirtualHost指令中的配置相符的时候, 主服务器中的DocumentRoot将永远不会被用到。 所以,如果你想做一个处理不对应任何一个特定虚拟主机的请求的特殊配置的话, 你只要简单的把它的配置放到<VirtualHost>配置段中, 并把它放到配置文件的最前面就可以了。
由此可见,主服务器也是建立默认站点的方法
但是,如果你想为不同的IP 地址或是端口提供不同的内容时,这样就不能使用*了
<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>
使用这样一个使用通配符端口的默认虚拟主机可以有效的防止请求被主 服务器接收。
如果一个地址/端口对已经被一个基于域名的虚拟主机使用,那么默认虚 拟主机决不会处理发向这个地址/端口的请求。如果一个请求的 Host:头中包含未知信息,或者干脆就没有,那么它会被第一 个基于域名的虚拟主机(就是在配置文件中首先出现的使用了那个地址/端 口对的虚拟主机)处理。
您可以用AliasMatch或 RewriteRule来重写任何 请求,使它指向一个简单信息页面(a single information page)(或脚 本)。
当使用基于IP的虚拟主机时,特殊的名称_default_可以在没有匹配上其它列出的虚拟主机的情况下作为匹配任何IP地址的虚拟主机。在没有进行_default_虚拟主机的设定时,在没有IP与请求匹配的情况下,将使用“主服务器”(包括所有在虚拟主机配置段之外的配置)的配置。(但请注意:任何匹配NameVirtualHost指令的IP地址既不会使用"main"服务器配置,也不会使用_default_虚拟主机的配置。
ServerName
is specified, then the server attempts to deduce the hostname by performing a reverse lookup on the IP address. If no port is specified in the ServerName
, then the server will use the port from the incoming request. For optimal reliability and predictability, you should specify an explicit hostname and port using the ServerName
directive.解决方法1: 在配置文件里增加
ServerName <server_name_or_ip_addr>
还有,你可能需要在/etc/hosts 为这个servername配置ip,如果你没有安装bind等dns服务的话
解决方法2:
#echo ns.vhostman.net > /etc/hostname
#/bin/hostname -F /etc/hostname
注意/etc/hostname应该是短的主机名,FQDN应该在 /etc/hosts中配置
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs
可能是启动了apache 1.x了,现停掉httpd,然后在启动apache2
作者:Johnny 更新日期:2005-11-12