對於普通流量不大的靜態站點,所需的 AWS 服務都是免費的,但是我要先提醒,AWS 的使用體驗真的很繁瑣,至少比在 VPS 中建立網站複雜多了。這裏只是大概記錄一下使用亞馬遜服務建立一個自有域名且啓用了 HTTPS 的靜態網站的步驟。
首先你要有一個亞馬遜服務的賬戶。然後在 S3 服務中建立一個 Bucket,如果你的網站是 abc.domain.ltd 那麼你的 Bucket 名字就可以叫 abc.domain.ltd 。要給予公共訪問權限,以及啓用 Static website hosting 。設置完成後在 Properties 選項卡的底部可以看到訪問這個靜態站點的 URL( 如:http://abc.domain.ltd.s3-website-us-east-1.amazonaws.com/ )。如果你往這個 Bucket 里上傳一個 index.html 文件,那麼應該可以通過 http://abc.domain.ltd.s3-website-us-east-1.amazonaws.com/index.html 訪問到。
第二步是通過 AWS Certificate Manager 申請或導入啓用 HTTPS 所需的證書。我沒有試過導入,所以這裏只介紹下申請。申請時我只填寫里二級域名,使用的 DNS 驗證方式。提交後可以看到需要添加的 CNAME DNS 記錄。如果域名在 Cloudflare 那麼直接新建一條 CNAME 記錄,填入 Host 和 Value 的值,過一小會兒就能看到證書頒發里。如果是在 Namecheap, 直接複製進去 Host 和 Value 值似乎不行,可以嘗試只輸入 Host 值的前兩部分(第二個點之前的字符,如:_904706782abb3d16301321f28db53e03.abc )以及不帶最後一個點的 Value(如:_0ba986089fff81c1b4f395a2ea75f42e.hkvuiqjoua.acm-validations.aws )。可以使用 dig 命令查看 DNS 記錄是否生效:
dig _904706782abb3d16301321f28db53e03.abc.domain.ltd CNAME
如果生效了會在 ANSWER SECTION 看到前面設定的值。如果沒有生效或設置錯誤,會出現 status: NXDOMAIN 及 ANSWER: 0 字樣。
第三步是在 AWS CloudFront 里新建一個 Distribution,選擇需要的 Bucket 以及輸入要用域名 abc.domain.ltd。證書那裏選擇剛剛生成的證書。建立後會生成一個 Distribution domain name 類似d174updd62jl4k.cloudfront.net 。然後在 DNS 中再增加一條 CNAME 記錄,Host 是 abc,值是 d174updd62jl4k.cloudfront.net 。生效後就大功告成可以用 https://abc.domain.ltd 訪問了。如果你遇到 SSL_ERROR_NO_CYPHER_OVERLAP 報錯,可以嘗試在 Distribution 的 General 選項卡中找到 Alternate Domain Names 輸入框,輸入你的域名如 abc.domain.ltd ,待其生效後應該就可以了。