Apache 配置的子域名问题

Apache 配置的子域名问题

我正在尝试实现以下目标:

http:// site.com -> 主站点(重写 www.site.com,不带 www)

https:// predeploy.site.com -> 第二个站点(受密码保护和 SSL)

https:// site.com -> 连接被拒绝

http://predeploy.site.com-> 连接被拒绝

子域名的 DNS 是通过 A 记录而不是 CNAME 完成的,因为它们显然是 Linode 名称服务器的首选方法。site.com 和 predeploy.site.com 都解析为同一个 IP。

我设置了两个虚拟主机:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName site.com
    ServerAlias www.site.com
    DocumentRoot /var/www/site.com
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName predeploy.site.com
    DocumentRoot /var/www/predeploy.site.com
    SSLEngine on
    ... # Basic auth and SSL stuff, which works
</VirtualHost>

问题是 https:// site.com 提供第二个站点(与 https:// predeploy.site.com 相同,并且需要身份验证),而 http:// predeploy.site.com 提供主站点(与 http:// site.com 相同)。我认为这意味着虚拟主机错误。我该如何修复它们?

答案1

它的行为就像您已配置它一样。让我解释一下:

SSL 基于端口,除非您使用 UCC 证书,否则 SSL 下实际上不存在“NameVirtualHost”。这意味着,如果您对两个站点使用相同的 IP 地址,它将始终显示您配置的 SSL 站点,因为它绑定在端口上。

您没有为端口 80 的 predeploy.site.com 创建 VirtualHost,这意味着它将默认为第一个。如果您希望将不使用 SSL 的 predeploy 重定向到使用 SSL 的 predeploy,则需要在端口 80 上为其创建一个虚拟主机,然后在该虚拟主机内进行重定向。

相关内容