昨天知道瀏覽器怎麼透過 DNS 找到 IP 位址,也查過 www.google.com 的位址記錄(Address Record,A 記錄)。不過,那是別人的 Domain Name。
如果想讓自己的網站也有名字,要去哪裡取得?拿到名字後,又要在哪裡填入 EC2 的EIP呢?
今天先來認識**網域註冊(Domain Registration)**與 DNS 代管(DNS Hosting),比較 Cloudflare 和 AWS 的 Route 53,再用 Cloudflare 示範怎麼把名稱接上 EC2 ㄅ!
我們平常說的「買網域」,通常是向**網域註冊商(Registrar)**申請一個還沒被註冊的名稱,並依註冊年限付費、續約。
取得名字後,還要有地方管理它的 DNS 記錄,這就是所謂的 DNS 代管(DNS Hosting)。至於網站程式,則繼續在原本的 EC2 上執行。
| 角色 | 負責什麼 |
|---|---|
| Registrar | 辦理 Domain Registration、續約與名稱伺服器(Nameserver)設定 |
| DNS Hosting | 管理 DNS 記錄,由權威名稱伺服器(Authoritative Nameserver)回答查詢 |
| AWS EC2 | 透過 Docker Container 執行 Next.js 網站,回應網站請求 |
Domain Registration 與 DNS 代管可以由同一家業者提供,也可以分開由自己選擇喔!
之前我們一直在 AWS 上操作,而 AWS 也有提供 Domain Registration 與 DNS Hosting 的功能也就是 Amazon Route 53。當然還有另一個選擇也就是我們平常很常看到擋爬蟲的 Cloudflare,Cloudflare 除了 DNS Hosting 之外,也有提供像是**網站代理(Web Proxy)**等功能。
而我們先比較這兩者服務的差異:
| 比較項目 | Cloudflare | AWS Route 53 |
|---|---|---|
| Domain Registration | 可透過 Cloudflare 的 Cloudflare Registrar 註冊,但 Domain 要另付費 | 可註冊 Domain,Domain 另付費 |
| DNS Hosting 費用 | 免費方案(Free)中就有包含 DNS Hosting | 依 DNS 託管區域(Hosted Zone)與查詢量等項目計費 |
| Web Proxy | 可選僅 DNS(DNS only),或啟用代理(Proxied)讓網站請求經過 Cloudflare | DNS 服務本身不代理網頁請求 |
而我自己之前在選擇服務時,先比較了兩者的價格。另外,當時我使用的是 AWS 免費帳戶方案(Free plan),無法透過 Route 53 購買網域。所以再考量這兩者因素後,最後決定使用 Cloudflare。
如果想方便管理、使用 AWS 全家桶,也可以選擇 Route 53;若要透過它購買 Domain,記得先確認帳戶方案是否支援喔!
好了,接著我們就沿用之前 Cloudflare 示範設定,網站繼續放在 AWS,由 Cloudflare 管理 DNS。
還有今天會使用 DNS only ,瀏覽器直接連到 EC2。等一下新增記錄時,再來看這個選項怎麼設定。
另外,Cloudflare 的 1.1.1.1 公用 DNS 解析服務(Public DNS Resolver),是幫使用者找答案;今天要用的 DNS 代管服務,則是讓我們管理答案。來看網站的人可以繼續使用原本的解析器(Resolver)。
這次以新註冊、尚未承載其他服務的練習網域為例。可以在 Cloudflare 的**註冊網域(Register domains)**搜尋想要的名稱,確認可註冊、註冊與續約費用後,再依畫面完成付款、聯絡資料及信箱驗證。
今天會先用 HTTP 驗證,所以挑選網域時,要記得留意像 .dev 和 .app 這類要求是 HTTPS 的後綴。如果已經使用這類網域,可以先完成 DNS 設定與查詢,等下一篇設定 HTTPS 後,再用瀏覽器驗證網站。
透過 Cloudflare Registrar 註冊的 Domain,會自動使用 Cloudflare 的權威 DNS。 使用它作為註冊商期間,不能直接改成其他業者的名稱伺服器,選擇前要先知道這個限制。
如果是已在其他註冊商取得練習 Domain,就到 Cloudflare 的網域(Domains)→ 加入網域(Onboard a domain),輸入自己的 Domain name,再選擇方案。稍後還要回註冊商更換名稱伺服器。
以下仍用 example.com 和 203.0.113.10 示意,操作時都要換成自己的 Domain 與 EIP。
開始前,先確認 EIP 仍關聯到這台 EC2,並能用原本的 HTTP 網址開啟網站,再來加入 DNS 設定。
進入 Cloudflare 中自己的 Domain,找到 DNS → 記錄(Records),按新增記錄(Add record)。
若列表已有註冊商停放頁用的同名 A Record、IPv6 位址記錄(AAAA Record),或正規名稱記錄(Canonical Name Record,CNAME),先移除這些舊目標,再依下面設定建立。這裡以尚未承載其他服務的練習 Domain 為前提;CNAME 的用途會在後面設定 www 時說明。
昨天提到,A Record 是名稱和**第 4 版網際網路協定(Internet Protocol version 4,IPv4)位址的對應。這次要設定整個 example.com,可以在名稱(Name)**欄位填 @,它在這個介面代表目前的網域本身。
| 欄位 | 這次填什麼 |
|---|---|
| 類型(Type) | A |
| 名稱(Name) | @ |
| IPv4 位址(IPv4 address) | 自己的 EIP,例如 203.0.113.10 |
| 代理狀態(Proxy status) | 僅 DNS(DNS only,灰雲) |
| 存活時間(Time to Live,TTL) | 先保留自動(Auto) |
確認後按儲存(Save)。IP 欄位只填數字位址,不用加上 http://、連接埠(Port)或路徑。
再新增一筆正規名稱記錄(Canonical Name Record,CNAME),把 www.example.com 設成 example.com 的別名。查詢時,就能沿著目標名稱繼續找位址:
| 欄位 | 這次填什麼 |
|---|---|
| 類型(Type) | CNAME |
| 名稱(Name) | www |
| 目標(Target) | 自己的網域,例如 example.com |
| 代理狀態(Proxy status) | 僅 DNS(DNS only,灰雲) |
| 存活時間(TTL) | 自動(Auto) |
www.example.com 跳成 example.com;如果需要跳轉,要另外設定網站的重新導向(Redirect),網站本身也要能處理這兩個名稱。剛才兩筆 Records 都有一個選項叫存活時間(Time to Live,TTL)。它以秒為單位,告訴解析器這份答案可以**快取(Cache)**多久;這次先使用 Cloudflare 的自動設定即可。
假設一筆 Record 的 TTL 是 300,就是 5 分鐘。而解析器剛取得答案後,通常可以在這段時間內重複使用。即使我們中途修改 IP,它仍可能先回覆還沒到期的舊答案。
所以改完 DNS,有人已經查到新 IP,有人還在使用舊 IP,不一定是設定錯誤。現在才把 TTL 調低,也不會立刻縮短別人已保存的舊 cache。
Record 準備好後,還要讓昨天介紹的查詢流程,找到 Cloudflare 的權威名稱伺服器。
這就和名稱伺服器記錄(Name Server Record,NS)有關:它記的是負責這個 Domain DNS 資料的名稱伺服器。透過 Cloudflare Registrar 新註冊的 Domain 已使用 Cloudflare DNS,不用再手動更換名稱伺服器。
若 Domain 是在其他註冊商取得的,而且已啟用網域名稱系統安全性延伸(Domain Name System Security Extensions,DNSSEC),也就是驗證 DNS 資料的安全機制,更換前要先依 Cloudflare 的遷移文件處理。
需要更換時,從 Cloudflare 的 Domain 總覽(Overview)或加入 Domain 的引導畫面,找到指派給自己的名稱伺服器,再填回註冊商的名稱伺服器(Nameservers)設定,取代原本的那一組。
這裡填的是 Cloudflare 提供的伺服器名稱,不是 EC2 的 IP;也不是在原本的 DNS Records 列表自行新增幾筆 NS 就完成。 註冊商會把這組資訊交給上層,讓解析器知道接下來該問誰。
完成後回到 Cloudflare,等待 Domain 狀態變成已啟用(Active)。更新名稱伺服器也需要時間,不是儲存後就會立即完成。
我們就直接沿用昨天的查詢方式,這次查自己的網域。下面的 example.com 要換成實際註冊的名稱:
dig example.com A +short
Windows 的話則是使用 nslookup -type=A example.com。這次採用僅 DNS 模式,查出的 IPv4 應該和 EC2 的 EIP 相同。
接著確認 EC2 和容器已啟動,在瀏覽器用 http:// 加上自己的網域開啟網站。
如果 IP 正確但網站打不開,就要回頭檢查原本的 HTTP 連線,以及**安全群組(Security Group)裡的我的 IP(My IP)**來源設定;換成 Domain 後,EC2 仍然要允許目前的來源連線。
當自己的 Domain 能開啟原本的 Next.js 頁面,就完成今天的設定了。如果也設定了 www,就再確認一下 http://www.自己的網域 同樣要能使用喔!
下一篇再接著處理 HTTPS,讓網站連線加上加密。