Apache VirtualHost 别名通配符子域名问题

Apache VirtualHost 别名通配符子域名问题

我在 Ubuntu 10.04.3 上的 Apache 别名方面遇到了问题

我正在尝试做的事情如下:-

  • 端口 80 上的一个子域 (mydomain.domain.com) - 重定向到 mydomain.domain.com 的端口 443
  • 端口 443 上的一个子域 (mydomain.domain.com),SSlEngine 已启用

  • 端口 80 上的通配符子域名 (*.domain.com) - 重定向到 *.domain.com:443 的端口 443

  • 端口 443 上的通配符子域名 (*.domain.com),SSlEngine 已启用

/etc/apache2/sites-available 文件夹中有一个文件

<VirtualHost *:80>
    ServerName mydomain.domain.com
    DocumentRoot /var/www/mydomain
    DirectoryIndex index.cfm

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    ServerName mydomain.domain.com:443
    DocumentRoot /var/www/mydomain
    DirectoryIndex index.cfm

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^([a-zA-Z0-9/_/-]+)$ /index.cfm%{REQUEST_URI} [PT]


SSLEngine on
SSLProtocol -all +SSLv3 +TLSv1
...
...
</VirtualHost>

<VirtualHost *:80>
    ServerName something.domain.com
    ServerAlias *.domain.com
    DocumentRoot /var/www/mydomain_all
    DirectoryIndex index.cfm

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    ServerName something.domain.com:443
    ServerAlias *.domain.com:443
    DocumentRoot /var/www/mydomain_all
    DirectoryIndex index.cfm

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^([a-zA-Z0-9/_/-]+)$ /index.cfm%{REQUEST_URI} [PT]


SSLEngine on
SSLProtocol -all +SSLv3 +TLSv1
...
...
</VirtualHost>

问题是,所有对 anything.domain.com 的请求实际上都转到第一个 ssl VH,即 mydomain.domain.com - 我的顺序错了吗? 还是其他问题?

答案1

您还需要一个NameVirtualHost *:443指令来使端口上的第一个虚拟主机以外的其他虚拟主机正常运行。

根据您的 Apache 和 OpenSSL 版本,它可能会在启动期间发出有关 SSL 端口上的多个 vhost 的警告 - 请随意忽略它。

您是否对两个 SSL 虚拟主机使用相同的证书(希望是通配符),还是使用不同的证书?如果它们不同,则不支持 SNI 的连接客户端将始终获得第一个虚拟主机的证书。

相关内容