對于付不起錢的小伙計(jì),為了給公司省錢,想盡一切招數(shù)。今天就來分享一個(gè)使用阿里云OSS存儲搭配CND使用的網(wǎng)站ECS服務(wù)器部署方法《阿里云怎么采購比較優(yōu)惠?阿里云ECS內(nèi)網(wǎng)拉取OSS存儲并設(shè)置CDN鏡像》省錢教程。
阿里云提供的一種文件存儲方案,和我們以前接觸的百毒云BCS和新浪云的Storage是一個(gè)道理,即文件的云端存儲方案。一般而言,OSS只存儲網(wǎng)站所需要的靜態(tài)文件,而不存儲程序文件。例如將網(wǎng)站的圖片、視頻、腳本、樣式等文件存儲在OSS,同時(shí),OSS實(shí)際上有點(diǎn)類似我們以前使用的第三方服務(wù)商提供的相冊,OSS上的文件,阿里云會給一個(gè)url讓你可以直接使用。在依托OSS在windows或mac上的客戶端,管理OSS上的附件資源也很方便??傊?,OSS是幫助網(wǎng)站存儲文件的一項(xiàng)服務(wù)。
我們已經(jīng)有自己的服務(wù)器了,為什么還要將文件傳到OSS上,然后通過阿里云提供的url來使用附件呢?實(shí)際上我們現(xiàn)在的服務(wù)端開發(fā)工作中,一定要有云的概念,即我們在搭建服務(wù)器環(huán)境,設(shè)計(jì)服務(wù)端架構(gòu)的時(shí)候,必須以云計(jì)算出發(fā)去設(shè)計(jì)和實(shí)施。這是我們這幾年來服務(wù)端發(fā)展的結(jié)果。(當(dāng)然,如果一個(gè)網(wǎng)站實(shí)在太小了,沒多少人訪問,也可以忽視。)將網(wǎng)站運(yùn)行在ECS(云服務(wù)器)上,同時(shí),把一些大塊的文件(圖片、視頻)放在OSS,可以有效的降低訪客訪問(下載)這些文件時(shí),對服務(wù)器帶來的IO壓力,讓服務(wù)器運(yùn)行起來更加流暢。這是我們使用OSS服務(wù)的最根本原因。除此之外,使用OSS還可以加快附件的傳輸速度,用戶可以明顯感覺圖片、視頻加載變快,結(jié)合CDN,可以在文件的訪問路徑上進(jìn)一步優(yōu)化。相對于通過加服務(wù)器的存儲空間的話費(fèi),使用OSS還可以省錢。
CDN的作用
CDN這個(gè)詞應(yīng)該很多人都略知一二。我們就不解釋其運(yùn)作原理,直接說它都有什么好處。CDN通過網(wǎng)絡(luò)途徑,直接解決了網(wǎng)絡(luò)訪問不暢的問題。在使用CDN之前,你直接將域名解析到你的服務(wù)器,一個(gè)用戶訪問你的網(wǎng)站必須通過自家路由器,再到區(qū)域電信運(yùn)營商,再到主干網(wǎng),再通過網(wǎng)絡(luò)路由、DNS找到你的服務(wù)器,再把需要的資源下載到瀏覽器進(jìn)行展示。中間任何一個(gè)環(huán)節(jié)的網(wǎng)絡(luò)不好,都會導(dǎo)致網(wǎng)站訪問變慢,甚至訪問失敗。而使用CDN之后,你把域名解析到CDN提供的一個(gè)中間地址,再再CDN服務(wù)商處設(shè)置你的服務(wù)器真實(shí)IP。當(dāng)用戶訪問你的網(wǎng)站的時(shí)候,CDN服務(wù)商把你的網(wǎng)站資源緩存在自己的服務(wù)器上,并把距離訪客最近服務(wù)器上的緩存返回給訪客,這樣直接加快了網(wǎng)站的訪問速度。在七牛提供的服務(wù)中,我們遇到過一個(gè)詞,叫“鏡像”,把你的網(wǎng)站鏡像到七牛,實(shí)際上,這個(gè)過程就是CDN了,所以,這里的鏡像等于CDN。
除了上述的主要功能外,CDN近年來還增加智能解析、seo、防DDOS等服務(wù)。所以,現(xiàn)在的網(wǎng)站,不用CDN,都不好意思說自己的網(wǎng)站多牛逼。
通過內(nèi)網(wǎng)獲取OSS中的文件在外網(wǎng)中返回
在OSS的收費(fèi)策略中,存儲、外網(wǎng)訪問、API調(diào)用這三項(xiàng)都要收費(fèi),其中外網(wǎng)訪問的費(fèi)用還挺高。CDN也要收費(fèi),OSS外網(wǎng)訪問也要收費(fèi),總之阿里云是賺翻了。但是,在OSS的收費(fèi)策略中注明了:內(nèi)網(wǎng)訪問免費(fèi)。也就是說,如果我們的使用阿里云的ECS通過內(nèi)網(wǎng)去請求OSS中的資源,是不收費(fèi)的。所以,我們現(xiàn)在要解決的問題就是,通過內(nèi)網(wǎng)去請求的資源,怎么在外網(wǎng)中返回給訪客呢?
服務(wù)器和OSS Bucket必須在同一區(qū)域
這是一個(gè)前提條件,也就是要構(gòu)建“內(nèi)網(wǎng)”這個(gè)組合。如果你的網(wǎng)站服務(wù)器購買的是杭州的,在創(chuàng)建Bucket的時(shí)候,就要選擇杭州,如果是深圳的服務(wù)器,創(chuàng)建時(shí)就要選擇深圳的。
學(xué)會使用ningx的代理設(shè)置
nginx除了作為web服務(wù)器之外,另外一個(gè)重大功能就是作為代理服務(wù)器。這種輕便又多功能的特性,應(yīng)該是nginx身上最大的閃光點(diǎn)了。那么怎么來實(shí)現(xiàn)這種代理呢?其實(shí)很簡單。
打開你的nginx的配置文件,例如nginx.conf,如果你對這個(gè)配置文件已經(jīng)有一定的了解,那么應(yīng)該可以很容易區(qū)分http和server兩個(gè)區(qū)塊的區(qū)別。我們要做的,是在其中一個(gè)server中增加一些配置項(xiàng)。具體是哪一個(gè)server,就看你綁定域名的時(shí)候是怎么安排的??傊?,核心的配置如下:
http {
## ....
server {
## ....
location ~ .*\.(mp3|mp4|ovg)$ {
proxy_pass http://***.oss-cn-beijing-internal.aliyuncs.com;
}
## ...
}
## ....
}
上面灰色的,需要在OSS Bucket概覽頁獲取,修改nginx的配置之后,reload服務(wù)。
合理安排你的網(wǎng)站目錄和域名布局
在了解上面的這兩項(xiàng)基礎(chǔ)之上,你需要再思考一個(gè)問題:你打算仍然用 www.4526.cn 訪問你的網(wǎng)站和所有靜態(tài)文件,還是打算另外使用一個(gè)(或幾個(gè))域名來控制你的靜態(tài)文件訪問。我的建議是另外分出一個(gè)static.yourdomain.com域名作為訪問你的靜態(tài)文件的域名,因?yàn)楹竺嫖覀儠褂胏dn,而cdn則要求先解析域名到cdn服務(wù)商提供的地址。
那么我們接下來處理這個(gè)static域名。原來的www的所有東西都可以不同動,你需要再在nginx.conf中寫一個(gè)新的server來綁定static域名。同時(shí),這個(gè)server中必須保證:php是不能執(zhí)行的,同時(shí)不能被訪問(如果可以被訪問,那么php文件會被下載);所綁定的根目錄路徑和www的是一樣的,也就是說,訪問static其實(shí)還是訪問www,這樣,原來所有的靜態(tài)文件訪問地址只需要替換域名,而無需修改uri;添加上面的代理配置,注意,并不是所有的文件類型都通過代理去調(diào)用OSS中的資源,例如js、css,就可以直接使用本機(jī)上的(當(dāng)然,如果你覺得不嫌麻煩,或者想統(tǒng)一管理,其實(shí)也可以全部靜態(tài)文件都丟到OSS去,包括js、css);最后,重載nginx配置,解析static域名到你的服務(wù)器IP(這時(shí)我們還沒有涉及CDN)。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|eot|otf|svg|ttf|woff)$ {
expires 30d;
}
location ~ .*\.(js|css)?${
expires 12h;
}
# 使用OSS上面的對象
location ~ .*\.(mp3|mp4|ovg)$ {
expires 30d;
rewrite /(.+)$ /$1 break;
proxy_pass http://你的bucket.oss-cn-你的城市-internal.aliyuncs.com;
}
location ~ .*\.php$ {
deny all;
}
location ~ /\.{
deny all;
}
如果一切順利,你應(yīng)該可以使用static域名訪問你的靜態(tài)文件了。但是,如上配置,你得盡快把mp3 mp4 ovg文件上傳到OSS上面,而且還得保證url路徑和你的網(wǎng)站中使用的url路徑是一致的。
接下來的工作,就是把你的網(wǎng)站中的所有原來調(diào)用靜態(tài)文件的地址,修改為static域名對應(yīng)的url地址,這樣,就部署完成了。
部署CDN提速網(wǎng)站
為了省錢,我們可以考慮去使用一些效果還可以但免費(fèi)的CDN(或者收費(fèi)很便宜的也行)。CDN的部署很簡單,我們先注冊一個(gè)CDN,將上面解析到服務(wù)器IP的static域名重新解析到CDN服務(wù)商提供的地址,再在CDN后臺將源地址IP設(shè)置為我們自己的服務(wù)器IP。這樣就輕松搞定了。
但是,如果你偶爾還要修改css文件,如果直接使用cdn的話,會導(dǎo)致css文件緩存,這不利于及時(shí)刷新界面,讓訪客看到最新的界面效果。解決這個(gè)問題是矛盾的,我們又希望得到cdn的提速效果,又希望及時(shí)更新文件。如果你必須使用cdn,那么只能使用付費(fèi)的cdn,它們一般會提供一個(gè)api,當(dāng)你更新文件的時(shí)候,可以調(diào)用這個(gè)api,讓cdn主動更新對應(yīng)的文件。但是,如果你實(shí)在不想這么麻煩,干脆直接使用www域名來讀取css和js吧,把它們合并后輸出,節(jié)省寬帶!
ok,通過本文的講解,你應(yīng)該掌握了通過內(nèi)網(wǎng)獲取OSS資源,然后展示在外網(wǎng)的方法了吧。

kf@jusoucn.com
4008-020-360


4008-020-360
