寫在前面(2020.2),由于我已經(jīng)有一個網(wǎng)站使用的是AWS S3的圖片資源,所以想在小程序中使用同樣的。但是遇到了各種困難,磨難和坑,本篇為大家介紹我的解決方案,適合想用小程序+S3的同學(xué)。
用到的幾個東西:
AWS S3: 圖片服務(wù)器
AWS CloudFront: CDN服務(wù),可以讓全球享受最快的訪問速度
Web Host: 域名解析商
ACM: AWS中創(chuàng)建和管理SSL證書,驗證你的網(wǎng)站,以允許https訪問
遇到的坑
在AWS S3中,不用把你的bucket設(shè)成web hosting,否則會無法用https訪問。(具體原因我也不大清楚,可能是由于S3本身不支持Https訪問導(dǎo)致的)
AWS CloudFront需要使用自定義的SSL證書,但是這個證書有2個條件,第一個要在us-east-1建立(這個很好理解)。
第二個要證書長度大于2048位,不然選擇自定義證書那里會變灰,如果舊的不行重建一個就好了(我原來已經(jīng)有個證書了,也在us-east-1里,不過就是不能選擇,后來發(fā)現(xiàn)重新建一個就可以了)
- Cloudfront里面price class要選擇有Asia的,不然亞洲地區(qū)https無法訪問。
下面開始正文
1. 申請AWS S3
新建一個S3 Bucket, 命名必須是你的域名(比如我的是image.sfmeal.com),權(quán)限是open to public, 其他默認(rèn)就可以。
如果你已有舊的其他名字的bucket,要重新建一個,把舊的拷貝過來了。
完成這一步,就可以訪問你的圖片了(路徑是http://bucket-name.s3.amazon.com/yourimage)
2. 開通AWS Cloudfront
S3不支持https訪問,但是小程序要求請求是https的,所以這里要用到Cloudfront。
前往CloudFront頁面,新建Cloudfront,配置圖如下:

- Price Class選擇支持Asia的(否則國內(nèi)IP訪問不了哦)
- Alternate Domain Names就是需要綁定的域名,Cloudfront默認(rèn)會分配一個域名給你,這里的值會替換掉那個域名(需要在域名解析商增加一個CName指向cloudfront分配的域名)
比如,默認(rèn)分配給我的是 https://dassdsd11.cloudfront.com/yourimage, CNAMES我填的是image.sfmeal.com(如上圖),配置成功后最終訪問會變成https://image.sfmeal.com/yourimage
- SSL Certificate,要選擇Custom SSL Cerficate,如果是灰色不可選則表示你沒有us-east-1的證書或者你的證書不符合要求(長度不夠),那么我們下一步來創(chuàng)建證書。先選"Default CloudFront Certificate",回頭再修改。
其他默認(rèn),點(diǎn)擊創(chuàng)建。
現(xiàn)在我們測試一下路徑(https://dassdsd11.cloudfront.com/yourimage)OK!
3. 創(chuàng)建證書
前往AWS的Certificate Manager服務(wù)的頁面(ACM),打開后如下圖:

點(diǎn)擊Request a certificate創(chuàng)建證書(注意右上角的地區(qū)要選擇N. Virginia us-east-1才行,因為這是Cloudfront服務(wù)的大本營)
選擇驗證方式,可以通過DNS(在你的Web Host那里增加一個指定的CName)或者郵箱認(rèn)證(發(fā)郵件到你域名的管理員郵箱),哪種方便選擇哪種都一樣。
3.驗證后很快狀態(tài)一欄(Status)會變成Issued,就可以在Cloudfront把它那里修改為使用自定義SSL證書啦!
4. 更改Web Host配置
前往你的Web Host更改域名解析,把CloudFront分配你的域名添加進(jìn)CNAME里面作為value,key就是你自己的圖片域名(注意??這個域名必須和S3的bucket名字還有CloudFront里的別名一致,Cloudfront的第二步)
修改完成后,靜待解析完成。
現(xiàn)在我們測試一下路徑(https://image.sfmeal.com/yourimage)一切OK,完成了!