Apache 多个 IP 和 SSL

Apache 多个 IP 和 SSL

我有一个运行两个子域的 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.confsites-availableDebian 系统上的条目相反......

我敢打赌,这就是为什么你的初始 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>

相关内容