CDN在啟著兩個(gè)特點(diǎn):一是分步式的節(jié)點(diǎn),起到負(fù)載均衡、協(xié)調(diào)跨運(yùn)營商跨地域訪問的作用;二是節(jié)點(diǎn)上的緩存,這無疑可以減少源服務(wù)器的負(fù)載,節(jié)省帶寬。
正是由于CDN如上兩個(gè)特點(diǎn),也給網(wǎng)站的管理人員帶來了不少麻煩:
1. 靜態(tài)文件版本管理
CDN的緩存是用戶一般不可控的,且靜態(tài)資源(如:js、css、圖片等)的緩存時(shí)間非常長,雖然CDN提供商一般都會(huì)提供刷新緩存的方法,這種方法在少量更新時(shí)可以接受,但如果更新文件過多(如一次升級(jí)),則會(huì)非常麻煩??梢允褂?ldquo;靜態(tài)資源(JS、CSS、圖片)版本控制”說的,對靜態(tài)資源進(jìn)行管理,這樣每次升級(jí)時(shí)即省事又省心。
2. 啟用HTTP壓縮
HTTP壓縮是網(wǎng)頁優(yōu)化幾大方法中見效最大的一個(gè),啟用CDN后,HTTP壓縮的配置會(huì)比較麻煩。在做完成通常的啟用壓縮方法后,還要啟用壓縮對HTTP1.0、代理的支持,在IIS下配置如下:
cscript adsutil.vbs set W3SVC/Filters/Compression/Parameters/HcNoCompressionForHttp10 false
cscript adsutil.vbs set W3SVC/Filters/Compression/Parameters/HcNoCompressionForProxies false
做完上述配置后,通知CDN提供商,開通HTTP壓縮功能即可。
而我用的網(wǎng)宿CDN還有其特殊要求,他要求在響應(yīng)里增加一個(gè)HTTP Header: Vary: Accept-Encoding。只有有這個(gè)頭部的文件,才會(huì)接受壓縮。這個(gè)Header可以簡單地在IIS的站點(diǎn)屬性里添加。
3. 獲取客戶端真實(shí)IP
由于訪客不是直接訪問源服務(wù)器,跟源服務(wù)打交道的都是CDN的節(jié)點(diǎn)機(jī)器,所以在源服務(wù)器抓取到的IP都是節(jié)點(diǎn)IP。這對按ip來統(tǒng)計(jì)的瀏覽量、網(wǎng)站統(tǒng)計(jì)等模塊的影響會(huì)比較大。一般來說,CDN節(jié)點(diǎn)會(huì)以某種方式將源客戶端的IP傳遞給源服務(wù)器,就拿我用的網(wǎng)宿CDN來說,它是將源IP添加到了一個(gè)叫“Cdn-Src-Ip”的Http Header里,以C#語言為例,獲得客戶端真實(shí)IP的方式如下:
//網(wǎng)宿的cdn是
String srcIp = Request.Headers["Cdn-Src-Ip"];
if(srcIp == null) {
srcIp = Request.UserHostAddress;
}
//藍(lán)汛的是
HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"];
以上內(nèi)容,根據(jù)不同的CDN提供商可能會(huì)有所不同,操作前最好咨詢自己的CDN提供商
-
public static string GetUserIp
-
{
-
get
-
{
-
string userIP = "未獲取用戶IP";
-
-
try
-
{
-
if (HttpContext.Current == null
-
|| HttpContext.Current.Request == null
-
|| HttpContext.Current.Request.ServerVariables == null)
-
return "";
-
-
string CustomerIP = "";
-
-
-
CustomerIP = HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
-
if (!string.IsNullOrEmpty(CustomerIP))
-
{
-
return CustomerIP;
-
}
-
-
CustomerIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
-
-
if (!String.IsNullOrEmpty(CustomerIP))
-
return CustomerIP;
-
-
if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
-
{
-
CustomerIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
-
if (CustomerIP == null)
-
本網(wǎng)站發(fā)布或轉(zhuǎn)載的文章均來自網(wǎng)絡(luò),其原創(chuàng)性以及文中表達(dá)的觀點(diǎn)和判斷不代表本網(wǎng)站。
本文地址:http://seoheqn.com/news/article/93194/