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

Apa*_*ser 3 debian apache-http-server ssl virtual-host

我有一个虚拟服务器托管在 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

use*_*686 6

Apache可以使用TLS Server Name Indication看到请求的主机名。

但是,这需要相对较新的网络浏览器。例如,在 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>
Run Code Online (Sandbox Code Playgroud)

附加(子)域:

<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>
Run Code Online (Sandbox Code Playgroud)