我有一个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之前击中虚拟主机,但我想我试一试。是的,没有运气。
答案 0 :(得分:0)
我认为您应该定义NameVirtualHost,它将有助于使用一个ip处理多个域。 在httpd.conf中定义NameVirtualHost
之后定义将完成工作。确保重启apache。
答案 1 :(得分:0)
所以每个人都对他们的显示器大喊大叫,我在整个服务器上做了明显的安装SSL。