我在 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>