是否可以用域名或子域名替换“*”?
<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 上来解决了这个问题。当我们这样做时,一切都正常了。