Apache-2.4

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

  • June 16, 2021

我有一個在 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

要麼您獲得包含多個名稱的證書以涵蓋所有域,要麼查看您提到的域方案,您將在某些時候收到證書錯誤。

理論上,瀏覽器會查看 SAN/CN 以匹配其中找到的名稱以及它們用於連接的 DNS 名稱,如果不匹配,則會出現證書錯誤。

如果您使用的其他域是子域,那麼您至少可以擁有多名稱證書或萬用字元。

例如對於域:

不管是什麼.example.com ,您都可以使用像 * .example.com這樣的萬用字元,甚至包括一個用於 example.com 的 SAN。

另請注意,如果您有 1 個帶有“example.com”的虛擬主機,對到達您伺服器的其他名稱的請求將由同一個虛擬主機處理,因此您要麼擁有一個包含多個名稱的證書,以匹配所有情況,要麼您必須創建一個方案您可以在其中通過不同的虛擬主機和證書涵蓋它們。這完全取決於您真正想要涵蓋的內容。

引用自:https://serverfault.com/questions/1066076