我有一个Apache2服务器与多个虚拟主机。 其中一个域名现在需要SSL,因此他们可以使用Stripe进行付款。
我有一个单独的IP为该域(domain1)比主服务器的IP。 (主服务器99.99.99.88,独立IP 99.99.99.99)
在我切断所有内容之前,我试图让它在端口80(非SSL)上工作,以便我知道我的virts正在工作。
当我去IP(99.99.99.99)时,它parsing为domain2,这是服务器的默认域,而不是domain1。
httpd.conf中的Listen命令是Listen 80
这是我的vhosts.conf的相关代码
NameVirtualHost *:80 NameVirtualHost 99.99.99.99:80 <VirtualHost 99.99.99.99:80> ServerName domain1.com DocumentRoot /var/www/vhosts/domain1.com/httpdocs </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/vhosts/domain2.com/html ServerName www.domain2.com </VirtualHost> <VirtualHost *:80> ServerName portal.domain2.com DocumentRoot /var/www/vhosts/domain2.com/portal/public </VirtualHost> <VirtualHost *:80> ServerName demo.domain2.com DocumentRoot /var/www/vhosts/domain2.com/demo/public </VirtualHost> <VirtualHost *:80> ServerName domain3.info DocumentRoot /var/www/vhosts/domain3.info/html </VirtualHost> <VirtualHost *:80> ServerName domain1.com DocumentRoot /var/www/vhosts/domain1.com/httpdocs </VirtualHost>
我需要做什么以便我可以使用99.99.99.99访问服务器时访问domain1?
httpd看到VirtualHost的第一个*:80logging将成为*:80的默认站点。 因此,如果您input的任何主机名不是有效的ServerName条目,则它将转入您的domain2条目。
您可以通过在您的configuration中将“true”基本网站指定为第一个*:80虚拟主机来帮助阻止此行为。
针对具有特定IP地址的网站是个好习惯,例如:
NameVirtualHost 99.99.99.99:80 <VirualHost 99.99.99.99:80> ServerName domain2.com ... </VirtualHost>
这样做应该保证具有特定IP地址的站点从所述IP的明确条目被提供服务,而不是由于“最具体的configuration胜利”的默认服务。
参考这里 :
ServerNameinheritance最好总是明确列出每个基于名称的虚拟主机中的ServerName。 如果VirtualHost没有指定ServerName,则将从基本服务器configurationinheritance服务器名称。 如果全局未指定服务器名称,则通过第一个侦听地址的反向DNSparsing启动时检测到一个。 无论哪种情况,这种inheritance的服务器名称都会影响基于名称的虚拟主机parsing,所以最好总是在每个基于名称的虚拟主机中明确列出一个ServerName。
例如,假设您正在为域www.example.com提供服务,并且您希望添加指向相同IP地址的虚拟主机other.example.com。 然后你简单地将以下内容添加到httpd.conf中:
<VirtualHost *:80> # This first-listed virtual host is also the default for *:80 ServerName www.example.com ServerAlias example.com DocumentRoot /www/domain </VirtualHost> <VirtualHost *:80> ServerName other.example.com DocumentRoot /www/otherdomain </VirtualHost>