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

时间:2016-11-18 01:54:35

标签: apache ssl configuration virtualhost lets-encrypt

我有一个Ubuntu服务器,其中有几个子域运行虚拟主机(Apache)。大多数虚拟主机都在一个文件中,但是一个文件被分成两个文件(因为我们的加密在一个.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>

最后,这里是.conf文件,我们生成加密来监听HTTPS请求:

<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请求可以正常工作。但是HTTPS请求除了“ssl.domain.com”之外的任何域名&#39;首先生成一个&#39;你的连接不安全&#39;错误,然后从&ssl.domain.com&#39;加载。我更喜欢它只是产生一个错误,如果我是诚实的话就把它留在那里。如何阻止此重定向?

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

<VirtualHost *:443>

为:

<VirtualHost ssl.domain.com:443>

哪个没效果。

编辑:我也尝试实施.htaccess重写规则将https更改为http。我没想到它会起作用,因为请求会在它到达.htaccess之前击中虚拟主机,但我想我试一试。是的,没有运气。

2 个答案:

答案 0 :(得分:0)

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

之后定义将完成工作。确保重启apache。

答案 1 :(得分:0)

所以每个人都对他们的显示器大喊大叫,我在整个服务器上做了明显的安装SSL。