我有一个运行两个子域的 Apache 服务器,其中一个子域配置了 SSL。
为了使另一个子域名正常工作,我们当然必须设置一个新的 IP(因为另一个子域名配置了 SSL)。
但是,我们无法访问新的子域名,也不知道原因。Apache 配置应该没问题。
以下是我们的虚拟主机指令的片段:
# ssl domain
<VirtualHost 1.2.3.4.5:80>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
<Directory "/var/www/sub1">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# "regular" domain
<VirtualHost 2.3.4.5.6:80>
DocumentRoot /var/www/sub2
ServerName sub2.example.com
<Directory "/var/www/sub2">
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
对 sub1.example.com 的请求没有问题,但是当我们尝试 sub2.example.com 时什么也没有发生。
Apache 的“默认”配置设置为:
Listen 80
ServerName sub1.example.com
我们在 CentOS 6 上运行 Apache/2.2.15。
答案1
首先,请确保您的配置中有与此相关的内容:
NameVirtualHost *:80
NameVirtualHost *:443
正如在评论中提到的,我向您保证,虽然每个唯一的 SSL 虚拟主机都需要它自己的 IP 地址,但您可以在任何一个 IP 上拥有任意数量的非 SSL(ala 端口 80)虚拟主机。
您最有可能遇到的问题是 Apache 的默认mod_ssl
配置文件的设置方式。
在 CentOS 上它应该位于/etc/httpd/conf.d/ssl.conf
。
您会发现,由于某种原因,Apache(CentOS?)在该文件中使用了预先配置的 SSL vhost _default_
- 与底部的示例httpd.conf
或sites-available
Debian 系统上的条目相反......
我敢打赌,这就是为什么你的初始 SSL 配置从一开始就不起作用,因为它在同一个 IP 上重复了两遍(默认) 使用该默认文件中的默认 SSL vhost 进行配置ssl.conf
。
通常,当我设置一个新的 CentOS Apache 框时,我会注释掉VirtualHost
该文件中的整个条目,并将我想要的配置与所有其他配置一起放在其中httpd.conf
。
答案2
我设法通过为 sub1.example.com 创建另一个 vhost 指令(监听端口 80)来使其正常工作。
我猜我们的供应商在某个地方做了一个黑客攻击,将所有请求从第一个 IP 重定向到 HTTPS。这显然是我们需要一个额外的专用 IP 的原因。有点奇怪的是,监听端口 80 的 sub1.example.com 指令除了确保请求不会转到 sub2.example.com 之外什么也不做。通过 HTTP 访问 sub1.example.com 的用户被重定向到 HTTPS(某处...)。
有用 :)
NameVirtualHost *:80
NameVirtualHost *:443
# sub1.example.com PORT 80
<VirtualHost *:80>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
<Directory "/var/www/sub1">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# sub1.example.com SSL
<VirtualHost *:443>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
<Directory "/var/www/sub1">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# sub2.example.com PORT 80
<VirtualHost *:80>
DocumentRoot /var/www/sub2
ServerName sub2.example.com
<Directory "/var/www/sub2">
AllowOverride All
Order Allow,deny
Allow from all
</Directory>
</VirtualHost>