跳到主要內容

發表文章

目前顯示的是 5月, 2014的文章

[野人獻曝] 將Cloudfront的資源加上防外連機制

最近因為 Cloudfront 的流量費用越來越可怕了, 所以牙一咬就決定擋掉圖片的所有外連圖個減少開銷。 而 Cloudfront 正好有提供 Signed URL 這個玩意可以達成我的要求。 這玩意簡單來說就是在所要求的資源(如:圖片、檔案等)的網址後面多加一串 Query String。 例如: http://www.example.com/a.txt 經過改造後會變成 http://www.example.com/a.txt?blahblah , 而Server只要認那串 Query String 就可以決定是否要出所要求的內容, 就可以控制不必要的外連。 那接著就不提廢話,直接實作吧! 第一步要先到 AWS 的 Security Credentials , 然後頁面往下拉找到一個 Key Pairs 的 tab, 接著點擊 Create a new key pair , 他會產生一組pem檔並且要求下載, 請把這個檔案下載儲存。 同時頁面上也會顯示一組 Axxxxxxxxxx 的 key , 請務必把這組字串複製下來。 第二步要寫出一個產生 Signed URL 的 function, 內容大概如下 <? php /** * $resource:要處理的檔案網址 例如http://www.example.com/a.txt * $expire:過期的時間,單位是秒,這裡我預設有效時間為一個小時 */ function create_signed_url ( $resource , $expire = 3600 ) { $aws_key = 'Axxxxxxxx' ; // 就是上述所提到的key $pem_file = '' ; // 剛才下載的pem檔案放置路徑 $expire_time = time () + $expire ; // 這裡的值是個 Unix timestamp // 以下是 Cloudfront 的存取策略,內容基本上是個json string // 但是千萬不要用json_encode這個函式去編出內容,因為格式會不一樣 // 詳細