架構重整 - 使用 CloudFront 轉址

在「架構重整 – 使用 Route 53」中有提到,為了將案例中的主要網域 xxxx.com 轉址到 www.xxxx.com,我採用了 CloudFront 的方式來實現。主要是不想另外再用一個 nginx 負責轉址(需要額外的設定與維護),傾向使用 AWS 原生服務來完成,減少管理的資源。實現的方式也很簡單,只需要一個 S3 bucket,前面掛上 CloudFront,並到 Route 53 做對應設置即可。同時也使用 AWS 提供的 SSL 簽證,再也不用花冤望錢繳保護費了!

建立 S3 bucket

  1. 到 S3 建立一個 bucket,名字要和所需轉址的網域完全相同。比如說我們要轉的網址為 koding.work,就到 S3 中建立一個名稱為 koding.work 的 bucket
  2. 到 bucket 中的 Properties > Static website hosting,勾選 Redirect requests,在 Target bucket or domain 中填入 www.koding.work (目標網域),protocol 填入 https
架構重整 - 使用 CloudFront 轉址

建立 CloudFront

  1. 到 CloudFront,點 Create Distribution 建立新的集群
  2. Origin Domain Name 點擊後,會出現下拉選單,要選 xxxx.xxxx..s3-website-xxxxx.amazonaws.com 的 bucket,以這邊來說我們選擇 www.koding.work.s3-website-ap-northeast-1.amazonaws.com
拯救脆弱系統 – 使用 CloudFront 轉址
  1. 往下拉到 Distribution Settings 的部分,Alternate Domain Names (CNAMEs) 填入我們欲轉址的網域,於是填入 koding.work
  2. SSL Certificate 的部分,要先去 AWS Certificate Manager 建立一個 koding.work 的 SSL 憑證,再到這裡勾選 Custom SSL Certificate (example.com),並在下拉選單中選擇 SSL 憑證
架構重整 - 使用 CloudFront 轉址

5. 按 Create Distribution,等候一段時間就完成!

原理解釋

這邊解釋一下上述步驟的原理。

第四步的部分,因為我們是使用 S3 的 static website hosting,而不是只使用他的 bucket,所以 CloudFront 在選擇的時候,要選擇網域中有 s3-website 字眼的特殊 S3 網域為目標。

第五步的部分,因為我們希望使用者輸入 koding.work 的時候可以透過 DNS 指到這個 CloudFront 集群,所以需要特別設定進去,CloudFront 才會知道所對應的 CNAME 網域。

第六步的部分,我們希望無論是 http://koding.work 或是 https://koding.work 都能順利進入 CloudFront,所以需要為他掛上 SSL 憑證。使用 AWS 提供的憑證不需要額外付費,佛心來的一定要使用!

腦中測試

設定完畢後,我們來走一次各種情況的轉址流程。

情況一:使用者輸入 http://koding.work

  1. 透過 Route 53 得知,要指向我們設立的 CloudFront,此時走 HTTP
  2. 透過 CloudFront,proxy 到名稱叫做 koding.work 的 S3 Bucket static website hosting
  3. 透過 S3 的設定得知,要轉向 https://www.koding.work

情況二:使用者輸入 https://koding.work

  1. 透過 Route 53 得知,要指向我們剛剛設立的 CloudFront,但此時走 HTTPS!
  2. 透過 CloudFront ,proxy 到名稱叫做 koding.work 的 S3 Bucket static website hosting
  3. 透過 S3 的設定得知,要轉向 https://www.koding.work

如果我們沒有為 CloudFront 掛上 koding.work 的 SSL 簽證,走到第二步的時候,瀏覽器就會報錯表示簽證驗證失敗!這樣就不能到 S3 那邊進行轉址了!

透過 AWS 的 S3、CloudFront 和 Certificate Manager,我們就能簡單完成網域轉址的問題,不但不用自己管理轉址服務,還能使用免費的 SSL 簽證,實在完美!

延伸閱讀:
拯救脆弱系統 – 使用 Route 53
拯救脆弱系統 – 使用 ELB 與 Docker

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。