CDN+OSS能解決圖片加速的問題,那具體是怎樣配置的呢?這里我們先把兩個名詞了解清楚,有些名詞因為向來沒有被很好地解釋,導致使用者對概念理解不正確,從而對加速的流程理解有錯誤,即使按照文檔提示可以配置了,也無法正確理解為什么要那樣去配置。
加速域名
比如我的網站域名是www.mydomain.com,CDN是用來加速這個網站的圖片,那么有人就以為加速域名是:www.mydomain.com,即把加速域名理解為被加速的網站的域名。而實際上,我們應該添加一個二級域名來作為加速域名,加速域名的意思是,你訪問這個域名的時候,所訪問的資源是通過CDN來加速了的,需要注意的是,在這里,加速域名不是:www.mydomain.com。
源站域名
對於我們這個場景來說,源站域名就是OSS的域名。如果我們通過OSS域名來訪問圖片資源,那么就直接從OSS服務器獲取圖片,而如果從加速域名訪問圖片,則先試圖從CDN服務器獲取圖片資源,如果CDN服務器沒有緩存圖片資源,則CDN服務器會自動去源站OSS服務器獲取圖片資源並緩存在CDN服務器上。
配置及原理
具體來說,比如我要在網站某個頁面上顯示一張圖片,這張圖片是放OSS中的,地址為:https://mydomain.com-oss.aliyun.com/test.jpg。現在我想使用CDN來加速這張圖片,那么我需要在網站頁面代碼里面修改圖片的地址為加速域名的地址。我先在阿里雲的域名管理中選擇域名:mydomain.com,然后給它添加一個二級域名,暫且就叫cdn.mydomain.com吧,之后在阿里雲CDN控制台的域名管理界面上,添加一個加速域名,就是這個:cdn.mydomain.com,源站域名就設置為:https://mydomain.com-oss.aliyun.com。阿里雲CDN會給這個加速域名分配一個CNAME,比如:cdn.mydomain.com.kunlunar.com,然后你在mydomain.com的域名解析那里,給二級域名:cdn.mydomain.com添加一個CNAME類型的解析,值為:cdn.mydomain.com.kunlunar.com。
現在就可以改下你網站界面里面的代碼了,比如原來有代碼如下:
<img src=”https://mydomain.com-oss.aliyun.com/test.jpg” />
就需要改成:
<img src=”https://cdn.mydomain.com/test.jpg” />
這樣,當用戶瀏覽你的網站:www.mydomain.com,訪問到我們原來要加速的那張圖片時,就訪問了:https://cdn.mydomain.com/test.jpg,因為我們已經給二級域名cdn.mydomain.com添加了一個CNAME解析,這時候DNS會把這個二級域名解析到CNAME的值,也就是前面提到的阿里雲給我們的CNAME值:cdn.mydomain.com.kunlunar.com,這個值再經過解析得到的是阿里雲智能DNS服務的IP,於是域名解析流程轉到了阿里雲的智能DNS。這個智能DNS根據用戶訪問的源IP地址,可以知道用戶離哪個CDN機房比較近,然后將那個CDN機房服務器的IP返回給用戶,假設為:111.222.33.44。
用戶得到這個IP:111.222.33.44后,就近地去獲取圖片了。當用戶第一次訪問CDN機房服務器時,找不到要訪問的圖片,這時候CDN服務器就會去訪問源站,也就是從OSS中獲取要訪問的圖片https://mydomain.com-oss.aliyun.com/test.jpg,並緩存到CDN服務器上,再將圖片內容返回給用戶。下一次如果有和該用戶位於同一區域的用戶訪問該圖片,則會走一樣的流程,只是這時候,CDN服務器上已經緩存好圖片,不需要再次去OSS中獲取原始圖片了。而CDN服務器相比於OSS存儲服務器,一般來說離用戶更近一些,這樣就達到了加速訪問的效果。阿里雲CDN+OSS組合使用時,還提供了自動刷新功能,開啟這個功能后,當OSS中的原始圖片信息改變時,會通知CDN服務器重新拉取並緩存,這樣就降低了訪問CDN服務器獲取資源時緩存未命中的機率。