配置 Apache 通过 HTTP + HTTPS 为多个子域提供服务

配置 Apache 通过 HTTP + HTTPS 为多个子域提供服务

我在 ISP 上托管了一个虚拟服务器,该服务器有 2 个公共 IPv4 地址。我想使用 Apache 运行多个子域(超过 2 个),并通过 HTTP 和 HTTPS 为它们提供服务。SSL 证书是 *.mydomain.com 的通配符证书。

我尝试以这种方式在 Debian 中配置 Apache,但失败了。要么是我的虚拟主机不被接受,要么是我收到 SSL 错误。(我知道 Apache 在提供证书之前看不到请求的主机名,但证书包含所有可能的子域)

请帮助创建一个最适合 Debian 的 Apache 配置布局的 httpd.conf。

所有详细信息:

  • Apache 监听 *:80(用于 HTTP)和 *:443(用于 HTTPS)
  • 应同时为两个端口/协议定义所有 NameVirtualHosts、别名等
  • 默认 mydomain.com 和 www.mydomain.com 应该根目录为 /var/www
  • foo.mydomain.com 和 bar.mydomain.com 等的附加 NameVirtualHosts,可以进行特殊配置,例如具有另一个 DocumentRoot

答案1

阿帕奇查看请求的主机名,使用TLS 服务器名称指示

但是,这需要相对较新的 Web 浏览器。例如,在 Windows XP 上使用 Internet Explorer 的用户将收到其他域的证书不匹配消息。(幸运的是,WinXP/IE 用户几乎已经绝迹。)维基百科文章有一个列表,并且这是一个测试页面如果你不确定。

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www
    <Directory /var/www/>
        Options Indexes FollowSymlinks MultiViews
    </Directory>
</VirtualHost>

NameVirtualHost *:443

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www
    <Directory /var/www/>
        Options Indexes FollowSymlinks MultiViews
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/ssl/private/example.com.pem
</VirtualHost>

附加(子)域:

<VirtualHost *:80>
    ServerName foo.example.com
    DocumentRoot /sites/foo
</VirtualHost>

<VirtualHost *:443>
    ServerName foo.example.com
    DocumentRoot /sites/foo

    SSLEngine on
    SSLCertificateFile /etc/ssl/private/foo.example.com.pem
</VirtualHost>

相关内容