按名称查看 Apache 虚拟主机

按名称查看 Apache 虚拟主机

是否可以用域名或子域名替换“*”?

<VirtualHost *:443>

更新

问题是我在启动 Apache 时收到此错误:

[Mon Aug 16 13:42:48 2010] [warn] _default_ VirtualHost overlap on port 443, the first has precedence

我在 :443 上为子域名和主域名各设置了一个虚拟主机。当我删除子域名时,不再出现该错误。

附注:如果此配置可以更有效,请告诉我如何

domain.com 配置

<VirtualHost *:80>
 ServerAdmin [email protected]
 ServerName  www.domain.com
 ServerAlias domain.com
 ServerAlias xx.xxx.xxx.xx

 # Directory Root.
 DocumentRoot /sites/domain.com/www/

 # Logfiles
 ErrorLog  /sites/domain.com/logs/error.log
 CustomLog /sites/domain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
 ServerName  www.domain.com

 # Directory Root.
 DocumentRoot /sites/domain.com/www/

 # Enable SSL
 SSLEngine On
 SSLCertificateFile  /sites/domain.com/ssl/star_domain_com.crt
 SSLCertificateKeyFile /sites/domain.com/ssl/ikeyless.key
 SSLCertificateChainFile /sites/domain.com/ssl/DigiCertCA.crt
 SetEnvIf User-Agent ..*MSIE.*. nokeepalive ssl-unclean-shutdown
</VirtualHost>

support.domain.com 配置

<VirtualHost *:80>
 ServerName support.domain.com

 # Directory Root.
 DocumentRoot /sites/support.domain.com/www/

 # Logfiles
 ErrorLog  /sites/support.domain.com/logs/error.log
 CustomLog /sites/support.domain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
 ServerName support.domain.com

 # Directory Root.
 DocumentRoot /sites/support.domain.com/www/

 # Logfiles
 ErrorLog  /sites/support.domain.com/logs/error.log
 CustomLog /sites/support.domain.com/logs/access.log combined

 # Enable SSL
 SSLEngine On
 SSLCertificateFile  /sites/domain.com/ssl/star_domain_com.crt
 SSLCertificateKeyFile /sites/domain.com/ssl/domain.key
 SSLCertificateChainFile /sites/domain.com/ssl/DigiCertCA.crt
 SetEnvIf User-Agent ..*MSIE.*. nokeepalive ssl-unclean-shutdown
</VirtualHost>

当我尝试访问 support.domain.com 时,它指向 domain.com 并且在 https 中不会加载我们的支持站点,但在 http 中可以正常工作。

答案1

是的,这是apache配置中非常强大的部分。

例如,假设您正在为该域提供服务www.域名.tld并且您希望添加虚拟主机www.otherdomain.tld,指向相同的 IP 地址。然后,只需将以下内容添加到 httpd.conf 中:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.domain.tld
    ServerAlias domain.tld *.domain.tld
    DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
    ServerName www.otherdomain.tld
    DocumentRoot /www/otherdomain
</VirtualHost>

完整文档请见此处:http://httpd.apache.org/docs/2.2/vhosts/

最终答案:添加名称虚拟主机 *:443指令到您的默认配置。

答案2

您可以使用星号指定特定的 IP,只要该 IP 是用 NameVirtualHost 指定的即可。名称在ServerName和中指定ServerAlias

星号匹配 Apache 绑定的所有 IP 地址VirtualHost

答案3

您对它设置的默认虚拟主机做过什么吗?

如果您不进行任何自定义,apache 将在 conf.d/ssl.conf 中为某些 SSL 内容创建一个单独的配置文件,并在其中声明一个名为的虚拟主机_default_:443

如果我在主配置中添加一个 vhost 作为 *:443,它会出现同样的错误,而如果我_default_:443在 conf.d/ssl.conf 中删除 vhost,则不会出现同样的错误。

答案4

我们通过将我们所有的 SSL 放在一个特定的 IP 地址上,然后将所有其他网站放在辅助 IP 上来解决了这个问题。当我们这样做时,一切都正常了。

相关内容