Blog專案 - IIS Hosting - 把網站公開到網路上
2020-10-11 16:53 Last Edited: 2020-10-11 18:43 1,541

發現有些朋友即使已經工作幾年了,沒碰過Web的話還是會不懂Web Hosting的機制,所以今天寫一篇關於Hosting的文章。

我們開發了網站,當然要讓自己以外的人也能訪問到網站。按照之前的教程,我們已經有一個具備基本功能的Web Application project,它其實是一個用來接收Http request的程式,當接收到有效的Http request時,就回傳一個html給要求者(訪客)。而這個程式可以用不同的方式執行,可以是一個.exe在桌面上執行,可以掛在IIS上面執行,可以掛在azure上、docker上、甚至ftp server。

在Debug的時候也可以看到visual studio可以讓你選擇不同的方式執行Debug mode。


這次我先選擇把網站掛在IIS (Internet Information Service),它是Windows內置的服務,用來集中管理互聯網服務,可以簡單為網站進行設定,比如說啟動/關閉網站、SSL證書、設定Configuration、快取機制等。如未啟用的話,google一下「iis 安裝」,照著做就可以。

啟用成功後,你可以打開IIS,應該會有一個叫做「Default Web Site」的網站。這個網站其實就是http://localhost會指向的目標。Default Web Site下面有些地球圖示的就是Deploy到Default Web Site下的子網站/功能,比如http://localhost/HkexNewsServer就會訪問HkexNEwsServer這個網站。

在visual studio,在你的Project右鍵按Publish,選Web Server(IIS),選Web Deploy

Server選擇localhost,Site name填Default Web Site/網站的名稱
如上圖般設定,你的網站就會部署到localhost/HkexNewsServer
如果想登入到http://localhost就直接連上網站,則只填Default Web Site。
之後一直點下一步完成就會自動部署好。

如圖,完成後可以透過http://localhost進入剛部署好的網站。


當網站部署到IIS後,接下來就要把你家的電腦公開到網路上
流程大概像下圖這樣 (port:443應該改成80,因為現在只是用http登入網站)

現在可以透http://localhost進入網站,但localhost指的是本機,訪客輸入http://localhost是進不去你的主機的,他需要你主機的ip才能登進去,那接下來就要講怎樣達成這個目標。

IP這東西是網路的基本,網路上的訊息交換都要有IP,雙方才知道訊息要往哪裡收發。而IP這東西是由網路供應商分配給用家的,網路供應商會在你家安裝一台Router,把LAN線插進Router的瞬間,網路供應商就會分配一個Public IP給那台Router (圖中為11.22.33.44),Router就能上網。用家從主機用LAN線連接Router,主機會加入到Router的私人網路,獲分配到一個Private IP(圖中為192.168.1.2),Router將網路訊號轉發到主機,這樣主機才能透過Router的訊號上網。

所以你會發現由始至終IP都在Router,可是網站架在你主機上的IIS,就算從外面訪問http://11.22.33.44:80,Router也不知道該怎麼回應。這時候你要在Router設定Port Forwarding,告訴Router所有某個傳給Router的某個port的訊號,要傳到Router私人網路下的哪一台機器上。


像圖中,我家的PC在Router的私人網路中ip永遠設定成192.168.1.2 (在圖2的LAN選項中設定)
然後所有port: 1433、3000、80、443的都發往192.168.1.2這台電腦,也設定了一些名稱方便管理。
而IIS中的Default Web Site早已設定好接收443、80的封包

所以世界各地的訪客只要登入http://11.22.33.44,就會像流程圖一樣到達主機,訪問到網站。


最後一步,平常我們上網當然沒有直接輸入IP這麼硬核,也不可能記得下,所以通常都會使用一些容易記憶的網址,比如說cancode.co。當訪客訪問http://cancode.co時,其實首先會到達一個DNS (Domain Name System) 網站,問它cancode.co其實是哪一個IP,DNS會告訴他其實是11.22.33.44,然後瀏覽器實際訪問的會是http://11.22.33.44,cancode.co只是一個代號。至於cancode.co其實指向哪一個IP,則由這個hostname的主人決定,在域名註冊商處買入hostname後,一般都有頁面或者API讓主人設定要指向哪一個IP。

要訪問哪一個DNS網站可以由Router設定,而且它一定要輸入IP,如果Router不設定的話,就會網路供應商提供,總之只要你訪問一個非IP的網址時,總會需要一個DNS告訴你這個網址是哪一個IP。

在一些國家,政府可能會制定一些政策,要求所有訪問都要經某一個DNS,有些網站是非法的,則DNS會告訴你我沒有這個網址的真實IP地址,所以你會連不上,甚至會提供一個假的IP地址,做到封禁指定網站的效果。


還有就是DHCP,在以上的範例中我們很確定IP是11.22.33.44,但其實除非我們特別付費購買了固定IP服務,否則ISP很可能每隔一段時間就把你的IP換一下,所以一旦IP被換掉,我們就要立即更新通知所屬的域名註冊商。一些域名註冊商會提供DDNS服務(Dynamic DNS),它會提供一個程式讓用家背景執行,不斷檢查目前的IP,有變化就立即通知。也有些域名註冊商會提供API讓用家更新。

Category: System