我有一个在 AWS Elastic beanstalk 下运行的 apache。我有几个不同的域,我希望它们都以 HTTPS 中的特定域名结尾。
来自其他域名的重定向,例如https://domain1.com到https://maindomain.com返回 SSL 证书错误。
在 apache 中,我有两个虚拟主机配置,一个用于 *:80,一个用于 *:443。两者都设置为 maindomain.com。它们是用 certbot 创建的。
使此功能适用于所有其他域的最佳做法是什么?我想我需要为每个域设置一个 VirtualHost,但如何配置它才能使其与重定向一起工作?
显然,以下示例不起作用,因为它返回 SSL 错误:
<IfModule mod_ssl.c>
<VirtualHost domain1.com:443>
ServerName domain1.com
RedirectPermanent / https://maindomain.com/
</VirtualHost>
</IfModule>
这是默认的 Virtualhost *:80 配置
<VirtualHost *:80>
#ServerName maindomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =maindomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
这是默认的 Virtualhost *:443 配置
<IfModule mod_ssl.c>
<VirtualHost *:443>
#ServerName maindomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ServerName maindomain.com
SSLCertificateFile /etc/letsencrypt/live/maindomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/maindomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
非常感谢您的帮助。D
答案1
要么您获得一个包含多个名称的证书来覆盖所有域,要么查看您提到的域方案,您在某些时候会收到证书错误。
浏览器理论上会查看 SAN/CN 以匹配在其中找到的名称和用于连接的 DNS 名称,如果不匹配,则会收到证书错误。
如果您使用的其他域是子域,那么您至少可以拥有多个名称证书或通配符。
例如对于域:
whatever.example.com您可以使用通配符,例如 *.example.com甚至包括例如.com的SAN。
另请注意,如果您有 1 个虚拟主机,其中包含“example.com”,则到达您服务器的其他名称的请求将由同一虚拟主机处理,因此您要么拥有一个包含多个名称的证书,该证书可以匹配所有情况,要么您必须创建一个方案,通过不同的虚拟主机和证书覆盖所有名称。这完全取决于您真正想要覆盖的内容。