Apache-2.2

如何為多個虛擬主機的一個域設置 SSL

  • June 20, 2014

我有一個帶有多個虛擬主機的 Apache2 伺服器。其中一個域現在需要 SSL,以便他們可以使用 Stripe 進行支付工作。

我對該域(domain1)有一個單獨的 IP,而不是伺服器的主 IP。(主伺服器99.99.99.88,獨立IP 99.99.99.99)

在我削減一切之前,我試圖讓它在埠 80(非 SSL)上工作,以便我知道我的 virts 正在工作。

當我轉到 IP (99.99.99.99) 時,它解析為 domain2,這是伺服器的預設域,而不是 domain1。

httpd.conf 中的 Listen 命令是 Listen 80

這是我的 vhosts.conf 的相關程式碼

NameVirtualHost *:80

NameVirtualHost 99.99.99.99:80

<VirtualHost 99.99.99.99:80>
   ServerName domain1.com
   DocumentRoot /var/www/vhosts/domain1.com/httpdocs
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot /var/www/vhosts/domain2.com/html
   ServerName www.domain2.com
</VirtualHost>

<VirtualHost *:80>
   ServerName portal.domain2.com
   DocumentRoot /var/www/vhosts/domain2.com/portal/public
</VirtualHost>

<VirtualHost *:80>
   ServerName demo.domain2.com
   DocumentRoot /var/www/vhosts/domain2.com/demo/public
</VirtualHost>

<VirtualHost *:80>
   ServerName domain3.info
   DocumentRoot /var/www/vhosts/domain3.info/html
</VirtualHost>

<VirtualHost *:80>
   ServerName domain1.com
   DocumentRoot /var/www/vhosts/domain1.com/httpdocs
</VirtualHost>

我需要做什麼才能在使用 99.99.99.99 訪問伺服器時訪問 domain1?

httpd 看到 VirtualHost 的第一個 *:80 記錄將成為 *:80 的預設站點。因此,如果您輸入的任何主機名不是有效的 ServerName 條目,它將落入您的 domain2 條目。

您可以通過將“真正的”基礎網站指定為配置中的第一個 *:80 虛擬主機來幫助阻止這種行為。

單獨定位具有特定 IP 地址的網站是一種很好的做法,例如:

NameVirtualHost 99.99.99.99:80
<VirualHost 99.99.99.99:80>
 ServerName domain2.com
 ...
</VirtualHost>

執行上述操作應確保具有特定 IP 地址的站點是從所述 IP 的顯式條目提供的,而不是由於“最具體的配置獲勝”而導致的預設值。

參考這裡

ServerName 繼承 最好總是在每個基於名稱的虛擬主機中顯式列出一個 ServerName。如果 VirtualHost 未指定 ServerName,則將從基本伺服器配置繼承伺服器名稱。如果未全域指定伺服器名稱,則在啟動時通過第一個偵聽地址的反向 DNS 解析檢測到一個。在任何一種情況下,這個繼承的伺服器名稱都會影響基於名稱的虛擬主機解析,因此最好始終在每個基於名稱的虛擬主機中顯式列出一個 ServerName。

例如,假設您正在為域 www.example.com 提供服務,並且您希望添加指向同一 IP 地址的虛擬主機 other.example.com。然後,您只需將以下內容添加到 httpd.conf:

<VirtualHost *:80>
   # This first-listed virtual host is also the default for *:80
   ServerName www.example.com
   ServerAlias example.com 
   DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
   ServerName other.example.com
   DocumentRoot /www/otherdomain
</VirtualHost>

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