【发布时间】:2017-04-01 18:41:10
【问题描述】:
我有一个 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 请求首先会生成“您的连接不安全”错误,然后从“ssl.domain.com”加载。老实说,我宁愿它只是产生一个错误,然后就这样。如何防止这种重定向?
我应该注意我已经尝试将 SSL 子域的虚拟主机从:
<VirtualHost *:443>
到:
<VirtualHost ssl.domain.com:443>
没有效果。
编辑:我还尝试实施 .htaccess 重写规则以将 https 更改为 http。我不认为它会起作用,因为一个请求会在它到达 .htaccess 之前到达虚拟主机,但我想我会试一试。是的,没有运气。
【问题讨论】:
标签: apache ssl configuration virtualhost lets-encrypt