使用 Ubuntu + Nginx + NameCheap 輕鬆架站

使用 Ubuntu + Nginx + NameCheap 輕鬆架站

Posted by laochanlam on February 16, 2018

前言

若你希望能夠使用自己家中的電腦架設一個像 www.google.com 一般的網頁但又無從入手,那麼這篇文章十分適合你。

事先準備

  • 一個固定的 Public IP
  • 一個 Web Server — Nginx
  • 一個 Domain Name — NameCheap

Public IP

我們先來說IP 的概念,主要來說,IP 代表著你在網絡上的”地址”,只要你的設備有連接上網的需要,就要先取得一個 IP,再以該 IP 和網絡上其他的 IP(設備或伺服器)溝通。

我們一般在網絡上所看到的 IP (IPv4) 的格式為 wxyz 的格式(如140.116.245.x ),而每個未知數的範圍只有 0~255 共 256 個數字,但在網絡上的設備卻遠遠不止 256^4 = 4294967296 個(現在家中的電燈,開關等都開始有連網的需要),那麼我們要如何解決這個IP 有限的問題呢?

這個時候,Public IP 及 Private IP 的概念出來了,理念是把部分範圍的 IP 保留成為 Private IP 不在網絡上流通,而在網絡上流通的我們稱之為 Public IP,每個 Public IP 可以轉換成一堆的 Private IP,而家中的路由器就是一個很好的例子: Imgur 可圖中紅色的 IP (140.116.245.x) 為 Public IP,而 黑色的 IP (192.168.0.2 等) 所代表的就是 Private IP,可見上圖把一個 Public IP 分配成許多在保留區中的 Private IP,在需要溝通時再轉由 Public IP 作網絡上溝通的橋樑(技術詳見 NAT)。

如此一來,家中的兩台電話及一台 iPad 就可以使用同一個網絡地址對外進行溝通,大大減少了 IP 的使用率,以及達到隱藏設備的功能。

但是這個時候問題出現了,若我們想對主動地對 192.168.0.2 這台 iPhone 進行連接,我們也只能連到 140.116.245. x 這台路由器(因為只有 Public IP 才能在網絡上流通);故同樣地,若我們想在某台電腦上架設網站 (Web 伺服器 ),我們需要一個能被外部網絡直接連上的 Public IP(使用 Private IP 再由路由器挖洞也是一個方法,詳見下方問題部分)!


**問:可是我的 IP 是浮動的啊,那該怎麼辦? ! **


若你架設網站的那台機器是用 Public IP 地址,ISP (中華電信等)導致 IP 浮動的話,那我建議您可以使用以下方法之一:

  • 可以跟您的 ISP 申請固定的 Public IP

  • 使用 no-ip 動態轉址技術 (把 DNS 綁定到您的路由器上,這樣別人只需知道您的 Domain name 就可以連到你不斷浮動的 IP)

但若你架設網站的那台機器是用 Private IP 地址(在路由器裡面),DHCP 導致 IP 浮動的話,這樣就有點麻煩了,因為除了上述的步驟需要處理外,你還要額外處理:

  1. 先在路由器中綁定 Private IP 到您機器的 MAC address。
  2. 再由路由器挖洞 (設定 port forwarding),把 Public IP 的 port 轉發到 Private IP 的 port 中。

這樣別人可以從外面連到您有 Public IP 的路由器的某個 port, 再 forward 到 使用 Private IP 的機器的某個 port ,來完成一樣的功能。

Nginx

拿到 Public IP 設定好後,就可以開始進入我們今天的重點,架設 Web 伺服器(網站)!

先來介紹一下 Nginx ,Nginx 是一個 Web 伺服器,也許大家聽過 Apache,Nginx 跟Apache 是同一個層級的應用,沒有聽過也不打緊,反正他的功能就是讓你的網頁從你電腦的某個 Port 跑起來就對了!

我們先來安裝 Nginx,在 Ubuntu 上輸入

$ sudo apt-get install nginx

等待安裝完成後,我們開啓 Nginx

$ sudo /etc/init.d/nginx start

然後我們可以用 Chrome 等網頁瀏覽器測試一下 Nginx 的運行情況,在 Chrome 的網址列中打上你的 Public IP 加上 80 Port

140.116.245.x:80

若你看到了以下畫面 Imgur 恭喜你,那是 Nginx 跑在你電腦 80 Port 的測試網頁,這亦代表你電腦 80 Port 正在跑的網頁已經可以從你的 Public IP 連進來了

現在可以叫你的小夥伴嘗試連接你的網站”測試網頁”了XD

至於把自己的網頁替代掉 80 port 的測試網頁,或是多使用幾個 port 多跑幾個網頁的教學,筆者在此就不多加著墨,只想大家記住重要的概念:


在網頁瀏覽器上輸入140.116.245.x:8000 代表你希望連到140.116.245.x8000 port,只我們要做的事情是把網頁伺服器架設到自己主機(140.116.245.x) 的8000 port 上,那麼外面的人就可以從140.116.245.x:8000 順利連到你 8000 port 上的網頁。




**但是,我們通常看見的網頁不是長 140.116.245.x:8000 這麼醜的啊? !我想要架設的是像 www.google.com 這樣有血有肉的網頁啊! **



接下來就是 NameCheap 出場的時候了!

NameCheap

NameCheap 提供了 域名申請及DNS代管 的服務,有興趣的讀者可以了解一下 域名 (Domain) 跟 DNS Server 相關的知識,甚至可以把 DNS Server 架設到自己的主機上,沒興趣嗎?那也沒有關係,反正知道我們可以從這裡買得到我們想要的網址就好了!

我們先到 NameCheap 選擇想要申請的域名(想要申請的網址)並進行購買 Imgur 購買完屬於自己的域名後,我們就可以把剛剛買到的域名 Map 到我們的 ip 上 Imgur 再過幾分鐘後,你的網站就完成了,其他人就可以從你買的域名(網址)登到你 ip 所屬的主機上囉! Imgur