apache 如何配置多域名 https 重定向?

apache 如何配置多域名 https 重定向?

我有一个在 AWS Elastic beanstalk 下运行的 apache。我有几个不同的域,我希望它们都以 HTTPS 中的特定域名结尾。

来自其他域名的重定向,例如https://domain1.comhttps://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”,则到达您服务器的其他名称的请求将由同一虚拟主机处理,因此您要么拥有一个包含多个名称的证书,该证书可以匹配所有情况,要么您必须创建一个方案,通过不同的虚拟主机和证书覆盖所有名称。这完全取决于您真正想要覆盖的内容。

相关内容