講到要在一台主機架設多個站台,一般直覺想到的是用不同的 Port 區隔,例如:httq://web_server/、httq://web_server:8080/ 指向不同站台。不過,非 80 Port 網址親和力較差,甚至會被某些較機歪嚴格的防火牆阻擋(只開放 80 及 443),那麼同一台主機上的多個站台可以共用 80 Port 嗎?Yes!這是 HTTP 標準應用情境之一,主流網站伺服器也都內建支援。
請看示範。先使用 ping 驗證 www.intra.net 與 api.intra.net 均指向 IP 192.168.1.105,以瀏覽器連線 www.intra.net 及 api.intranet.net 顯示不同網頁,由 Request.PhysicalPath 可證兩個 default.aspx 各位於 X:\WWW\IntranetWww 及 X:\WWW\IntranetApi,分屬不同站台。
當輸入 www 及 api 兩組網址,瀏覽器連上的都是 192.168.1.105 這台機器的 80 Port ,但兩次送出的 HTTP Request 最大差異如下圖紅框所示,Request Header 中有個 Host 標頭,兩次傳送的內容分別是 Host: www.intra.net 及 Host: api.intra.net,伺服器便可依此判斷將 Request 交給不同站台處理,達成在同一 IP 80 Port 運行多個站台的效果。
回到 IIS 上,要如何設定才能實現多站台共享 80 Port?其實它就藏在新增網站的介面一個常被忽略的欄位-「主機名稱」,如以下範例,該站台監聽 80 Port,但只接受 HTTP Request Host 標頭為 api.intranet.net 的連線:
透過指定主機名稱,我們可以實現在 80 Port 執行多個站台的理想。而如下所示,IIS 允許其中一個站台不指定主機名稱(本例為 Default Web Site),作為查無符合 Host 標頭宣告時的預設站台。
學會這點,下回再有同主機掛多站台需求,除了區分不同 Port 外又多一招可用;而遇到「敲主機名稱網址與 IP 顯示網頁不同」問題,也該知道茶包要從哪裡射起囉~