通过 SSL 端口防止子域重定向

Preventing Subdomain Redirection via SSL Port

我有一个 Ubuntu 服务器,有几个子域 运行 脱离虚拟主机 (Apache)。大多数虚拟主机都在一个文件中,但是一个被分成两个文件(因为 Let's Encrypt 不支持在一个 .conf 文件中使用多个虚拟主机)。我仅在其中一个子域上安装了 SSL 证书;我目前不关心 SSL 的其他域。

我遇到的问题是对其他子域的 HTTPS 请求被路由到一个子域,我不希望这样。

例如,这是我的主要 .conf 文件结构:

<VirtualHost *>
    ServerAdmin webmaster@localhost
    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/domain
    <Directory "/var/www/domain">
        ...
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName sub.domain.com
    DocumentRoot /var/www/sub_domain
    <Directory "/var/www/sub_domain">
        ...
    </Directory>
</VirtualHost>

这是我安装了 SSL 的子域 .conf 文件结构:

<VirtualHost *:80>
    ServerName ssl.domain.com
    DocumentRoot /var/www/ssl_domain
    <Directory "/var/www/ssl_domain">
        ....
    </Directory>
</VirtualHost>

最后,这是 Let's Encrypt 生成的用于侦听 HTTPS 请求的 .conf 文件:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName ssl.domain.com
        DocumentRoot /var/www/ssl_domain
        <Directory "/var/www/ssl_domain">
            ....
        </Directory>
        SSLCertificateFile /path/to/cert.pem
        SSLCertificateKeyFile /path/to/key.key
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateChainFile /path/to/chain.pem
    </VirtualHost>
</IfModule>

对任何域的正常 HTTP 请求工作正常。对启用 SSL 的子域的 HTTPS 请求工作正常。但是对 'ssl.domain.com' 以外的任何域的 HTTPS 请求首先会生成 'Your connection is not secure' 错误,然后从 'ssl.domain.com' 加载。老实说,我宁愿它只产生一个错误并保留它。我如何防止这种重定向?

我应该注意到我已经尝试更改 SSL 子域的虚拟主机:

<VirtualHost *:443>

至:

<VirtualHost ssl.domain.com:443>

没有效果。

编辑:我还尝试实施 .htaccess 重写规则以将 https 更改为 http。我不认为它会起作用,因为请求会在它到达 .htaccess 之前到达虚拟主机,但我想我会试一试。是啊,运气不好。

我认为你应该定义 NameVirtualHost,这将有助于用一个 ip 处理多个域。 在 httpd.conf 中定义 NameVirtualHost

之后定义 就可以了。确保重新启动 apache。

所以对于每个对着他们的显示器大喊大叫的人,我做了显而易见的事情,只是在整个服务器上安装了 SSL。