如何在 Apache 2.4 上运行 2 个虚拟主机,其中一个使用端口 80“无 ssl”,另一个使用端口 443“ssl”?

如何在 Apache 2.4 上运行 2 个虚拟主机,其中一个使用端口 80“无 ssl”,另一个使用端口 443“ssl”?

我在 Windows Server 2008 R2 和 PHP 5.6.18 上运行 Apache 2.4.18。

我的 Apache 服务器默认已SSL开启。我需要运行两个不同的网站,其中一个网站使用SSL,而另一个网站不使用。

以下是我为了使其正常工作而添加到 httpd-vhosts.conf 文件中的内容

<VirtualHost *:80>
   ServerName SERVER1.example.com
   Redirect permanent "C:/phpsites/app1" https://sub1.example.com/
</VirtualHost>


<VirtualHost *:80>

    DocumentRoot "C:/phpsites/app2/public"
    ServerName SERVER1.example.com
    ServerAlias sub2.example.com

    SSLEngine Off

    <Directory "C:/phpsites/app2/public">
        AllowOverride All
        Require all Granted
    </Directory>

</VirtualHost>


<VirtualHost *:443>

    DocumentRoot "C:/phpsites/app1"
    ServerName SERVER1.example.com
    ServerAlias sub1.example.com

    SSLEngine On
    SSLCertificateFile "c:/Apache24/conf/certificate/cert.crt"
    SSLCertificateKeyFile "c:/Apache24/conf/certificate/private.key"

    <Directory "C:/phpsites/app1">
        AllowOverride All
        Require all Granted
    </Directory>

</VirtualHost>

上述设置无法正常工作。当我访问 时,**https**://sub1.example.comApache 会将我重定向到正确的站点C:/phpsites/app1。当我访问 时,**http**://sub1.example.com它会将我重定向到C:/phpsites/app2/public但我不想发生这种情况。而当我访问 时,由于某种原因http://sub2.example.com,我被重定向到**https**://sub1.example.com

我需要引导任何正在寻找 http://sub1.example.comhttps://sub1.example.com的用户**https**://sub1.example.com

任何正在寻找http://sub2.example.comhttps://sub2.example.com想要访问的用户**http**://sub2.example.com

我怎样才能让它工作?

更新

这是我执行时得到的结果httpd -D DUMP_VHOSTS

VirtualHost 配置:

*:80 is a NameVirtualHost


default server SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:27)
port 80 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:27)

port 80 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:34)
 alias sub2.example.com


*:443 is a NameVirtualHost
default server SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:52)
port 443 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:52)
 alias sub1.example.com

port 443 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-ssl.conf:85)

答案1

当我去http://sub1.example.com 它将我重定向到 C:/phpsites/app2/public 但我不希望发生这种情况。

这是因为您只有一个(默认)http 虚拟主机

<VirtualHost *:80>

    DocumentRoot "C:/phpsites/app2/public"
    ServerAdmin [email protected]
    ServerName sub2.example.com
    ServerAlias sub2.example.com

    SSLEngine Off

    <Directory "C:/phpsites/app2/public">
        AllowOverride All
        Require all Granted
    </Directory>

</VirtualHost>

您必须为 sub1.example.com 添加虚拟主机

<VirtualHost *:80>
   ServerName sub1.example.com
   Redirect 301 / https://sub1.example.com/
</VirtualHost>

下面这一行确实很奇怪

port 80 namevhost sub1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:43) alias sub2.example.com

为什么在 sub1 vhost 中使用 sub2 作为别名?

相关内容