昨天認識了 Elastic IP,可以替 EC2 保留固定的 Public IP,讓它停止再啟動後,位址仍然維持不變。
不過,我們平常分享網站,很少會直接傳一串 IP,通常會使用一個好記的名稱。那如果我也想替自己的網站取個名字,讓大家輸入名稱就能找到 EC2,要怎麼做呢?
像 example.com 這類名稱,就被叫做網域名稱(Domain name)。有了這個名稱,我們就能把它放進網址,讓使用者透過這名字找到該網站。
不過,Domain name 只是網址中的一部分。延續之前認識的 port,可以把下面這個網址拆開來看:
http://www.example.com:80/about
| 部分 | 代表什麼 |
|---|---|
http:// |
這次使用 HTTP |
www.example.com |
Domain name |
:80 |
要連線的 port;HTTP 使用預設的 80 時可以省略 |
/about |
向網站請求的路徑 |
這一整串就叫做 URL(網址)。而等一下要介紹的查詢 DNS 時,我們要查的是中間的 www.example.com,所以不用把前面的 http://、後面的 port 和路徑一起填進去。
再來看 Domain name 本身,它是有層次的,從右往左讀可以看到:
.com:頂級網域,英文是 Top-Level Domain,簡稱 TLD。example.com:位於 .com 之下的網域。www.example.com:example.com 底下的子網域,也可以用 blog、api 等名字。www 並不是每個網站都一定要加的字。example.com 和 www.example.com 是兩個不同的名稱,要讓它們都能開啟網站,就得有對應的 DNS 與網站設定。example.com 是保留給文件舉例的 Domain,不能拿來註冊喔~有了好記的名字之後,還有一件事要處理:瀏覽器要連到我們的 EC2,仍然需要知道它的 IP ,畢竟網址是給我們看的,機器看的是 IP。
這時就輪到 DNS(Domain Name System,網域名稱系統)。DNS 可以查詢 Domain name 對應的資料,而開網站時,我們最常用到的就是查出這個名稱對應的 IP,這個過程叫做名稱解析。
可以把它想成之前查電話簿的時候一樣。我們先找到要聯絡人的名字,看他的電話號碼,再撥電話給對方。開網站也是類似的流程:先查出 IP,接著才連到那個位址取得網頁。
不過,這份「電話簿」很大,資料也分散在不同的電話簿上,所以通常會由 DNS 解析器(Resolver) 幫我們找答案。解析器可能由網路業者提供,也可能是電腦或瀏覽器另外設定的 DNS 服務。
之後當自己的 Domain 設定成直接指向 EC2 的 EIP,流程就會像這樣:
DNS 解析器把 IP 告訴瀏覽器後,接下來的 HTTP 請求就交給 EC2 處理。負責回答名稱查詢的服務,和實際回傳網頁的主機,可以放在不同地方。
如果解析器之前查過相同的資料,而且留下來的答案還能用,就可以直接回覆。這種暫時保存下來、讓下一次查詢重複使用的資料,叫做快取(Cache)。
那如果沒有可用的 cache 呢?以查詢 www.example.com 為例,解析器會沿著 Domain 的層次,一步一步找到負責回答的地方:
.com 名稱伺服器的資訊。.com 的 TLD 名稱伺服器,取得負責 example.com 的名稱伺服器資訊。example.com 的權威名稱伺服器(Authoritative nameserver),由它依管理的 DNS 資料回答。前面說的名稱和 IP 對應,會記在 DNS 的 A 記錄裡。A 記錄是用來把一個名稱對應到 IPv4 位址,也就是之後我們就會把 EC2 的 EIP 填在這裡。
現在先用大家都熟悉的 www.google.com 練習,不需要啟動 EC2。macOS 可以在自己電腦的終端機使用 dig就可以了:
dig www.google.com A +short
A 表示查詢 IPv4 記錄+short 則只顯示精簡結果。www.google.com 的查詢結果,並不是自己的 EC2 位址。nslookup -type=A www.google.com
看後面 www.google.com 的答案即可;開頭的 Server/Address 是這次詢問的 DNS 伺服器。
今天知道名字怎麼找到 IP 了,下一篇就來看看自己的網域要去哪裡取得,以及怎麼設定 DNS,讓它指向我們的 EC2 ㄅ!