這是個講求 CP 值的時代,如何在一個 IIS 裡架設多個網站,而且是多個 HTTPS 的網站,提供安全及充分利用系統資源,是這次的主題。

基本設定

在 IIS 裡,每個網站都必須具有唯一的標籤,而這個標籤由下列三項組成:

  • IP 位址
  • Port 埠號
  • Host Header 主機名稱

因此如果要架設多個網站就在這三者玩把戲,對應的使用時機如下:

  • 一台伺服器有多個 IP 時
    • 例如有 192.168.1.10192.168.2.20 兩個 IP,就可以分別分派給不同的站台
  • 如果只有一個 IP 時
    • 可開額外的 Port 給其他網站
    • 預設是 80 Port,可以開 8080 或其他非系統常用 Port 給不同的站台
  • 以上都不喜歡時
    • 透過指定 Host Header 主機名稱來區分站台
    • 這裡會用該站台的網址來做設定

而這三者的設定在 IIS 裡面的站台繫結裡面可以處理大部分的設定。

IIS 站台繫結

HTTPS 簡介

再要求安全性的地方,我們會加上 SSL 來提供傳出加密,尤其是在 Google Chrome 瀏覽器 v58 之後的版本,對於 Https 的要求變得更嚴格,必須使用 2048 位密鑰的證書,這不僅直接影響到 SEO 的排名,更讓使用者在網址列前看到不安全三個紅字警示標示,讓使用者感覺怕怕的。

Not Secure

要使用 HTTPS 必須要搭配部署證書,也就是憑證檔,主要分三種類型

  • 單域名證書
    • 例如頒發給 www.example.com 的證書
  • 多域名證書
    • 例如頒發給 ap1.example.com 和 ap2.example.com 的證書
    • 會在證書中的主體別名(Subject Alternative Name)中標示
  • 通配符證書
    • 例如頒發給 *.example.com 的證書

多域名證書通配符證書是最貴的,他可以用於多個網域或站台。

HTTPS 設定

如果有手上有的是通配符證書了話,可以直接在 IIS 裡面的站台繫結去指定證書,如下圖,在主機名稱裡設定要使用 HTTPS 的站台名稱。

如果是使用多域名證書,IIS 預設是無法修改主機名稱的,因此在站台繫結裡會無法修改主機名稱欄位,此時需要透過修改 applicationHost.config 設定檔來達成目的,步驟如下:

  1. 停止 IIS 服務
  2. 開啟 C:\Windows\system32\inetsrv\config\applicationHost.config
  3. 找到 <system.applicationHost> 底下的 <sites> 段落
    • 此段落是 IIS 裡各站台的設定
  4. 修改 binding 屬性,輸入主機名稱
  5. 重新啟動 IIS 服務

範例如下:

<site name="AP1" id="1" serverAutoStart="false">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ap1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:ap1.example.com" />
        <binding protocol="https" bindingInformation="*:443:ap1.example.com" />
    </bindings>
</site>
<site name="AP2" id="2" serverAutoStart="false">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ap2" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:ap2.example.com" />
        <binding protocol="https" bindingInformation="*:443:ap2.example.com" />
    </bindings>
</site>

範例中有兩個站台 AP1 和 AP2,使用同一個 IP,同一個 Port,差別在於主機名稱不同,IIS 會自己去挑選適合的 SSL 憑證來使用,如此一來我們就有兩個 HTTPS 的站台了。


參考資料:


Poy Chang

Trial and Error