我正在從 Virtualhost 加載通配符子網域的 SSL 文件,但第二個虛擬主機加載第一個虛擬主機的 ssl 文件,並且瀏覽器報告無效證書錯誤
這是配置
<VirtualHost *:443>
ServerName cert-1.domain.com
ServerAlias cert-1.domain.com,*.net.domain.com
DocumentRoot /home/myuser/public_html
ServerAdmin [email protected]
UseCanonicalName Off
<IfModule mod_suphp.c>
suPHP_UserGroup myuser myuser
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup myuser myuser
</IfModule>
</IfModule>
<IfModule ssl_module>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cert-1.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cert-1.domain.com/privkey.pem
</IfModule>
</VirtualHost>
<VirtualHost *:443>
ServerName cert-2.domain.com
ServerAlias cert-2.domain.com,*.org.domain.com
DocumentRoot /home/myuser/public_html
ServerAdmin [email protected]
UseCanonicalName Off
<IfModule mod_suphp.c>
suPHP_UserGroup myuser myuser
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup myuser myuser
</IfModule>
</IfModule>
<IfModule ssl_module>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cert-2.domain.com-2/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cert-2.domain.com-2/privkey.pem
</IfModule>
</VirtualHost>
但是當我訪問 everything.org.domain.com 時,它會加載第一個虛擬主機的 SSL 文件,而不是第二個虛擬主機的 SSL 文件,
即使當我嘗試不在第一個或第二個虛擬主機中的子網域時,它仍然會載入第一個虛擬主機 SSL 文件,並且瀏覽器會拋出無效的 SSL 錯誤。
我該如何解決這個問題,
謝謝
答案1
伺服器別名應該用空格而不是逗號分隔,因此您的ServerAlias
行應該如下所示:
ServerAlias cert-1.domain.com *.net.domain.com
請注意,可以在單一區塊中給出更多ServerAlias
指令,這使得配置在存在許多別名的情況下更具可讀性。
如果您要求的主機不存在明確配置,Apache 會提供它找到的第一個區塊(這就是為什麼最好在最後的位置包含一個VirtualHost
區塊ServerAlias *
,以擁有一個「包羅萬象」的網站)。
因此,在您的情況下,這些ServerAlias
行都不起作用(無論如何,都不如您所期望的那樣),因為您正在為具有“cert-2.domain.com,*.org.domain.com”的伺服器定義別名名稱,包含逗號、星號等。為此,當您要求「anything.org.domain.com」時,Apache 會提供它遇到的第一個區塊,因為該主機名稱未在設定中定義。