Apache-2.2

Apache2 ssl +同一域的虛擬主機

  • March 2, 2012

我的網路伺服器託管一個網站的多個子域(虛擬主機),例如 sub1.example.com 和 sub2.example.com。這些虛擬主機之間的唯一區別是文件根目錄。其他所有內容都在虛擬主機之間共享。

現在我想對 HTTPS 做同樣的事情,但當然 ssl + virtualhost 很棘手。好消息是我的 SSL 證書對我的整個域都有效。因此我不需要指定每個虛擬主機證書。我要為每個虛擬主機指定的唯一內容是文件根目錄。

常見問題解答說:

基於名稱的虛擬主機是一種非常流行的辨識不同虛擬主機的方法。它允許您為許多不同的站點使用相同的 IP 地址和相同的埠號。當人們轉向 SSL 時,很自然地假設可以使用相同的方法在同一台伺服器上擁有許多不同的 SSL 虛擬主機。

這是可能的,但前提是使用 2.2.12 或更高版本的 Web 伺服器,使用 0.9.8j 或更高版本的 OpenSSL 建構。這是因為它需要一個只有最新版本的 SSL 規範才添加的功能,稱為伺服器名稱指示 (SNI)。

我正在使用 Apache 2.2.20 和 openssl 1.0.0e 附帶的 Ubuntu 11.10,所以我認為我應該很好。但是,我無法讓它工作。我已經啟用了預設和預設 SSL 站點。如果我像為 HTTP 那樣添加一個虛擬主機:

<VirtualHost *:443>
       ServerName sub1.example.com
       DocumentRoot /var/www/sub1
</VirtualHost>

然後嘗試重新啟動 Apache,我得到:

[Thu Mar 01 23:55:15 2012] [警告]預設VirtualHost 在埠 443 上重疊,第一個優先操作“啟動”失敗。

你可能需要的是三樣東西:

  1. 一個NameVirtualHost *:80指令。如果您想遵循 Ubuntu 約定,請將其放入ports.conf.
  2. 修復預設 SSL 虛擬主機上的主機規範。它<VirtualHost _default_:443>在預設配置中設置;它需要與您的其他虛擬主機的偵聽器規範和您的NameVirtualHost指令相匹配。
  3. 您還需要在新虛擬主機中指定與 SSL 相關的設置。 SSLEngine On並且需要您的證書設置。

..如果不是這種情況,請提供您現有的配置和apache2ctl -S.

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