通过 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。
我有一个 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。