可編寫指令碼在應用交付負載平衡)中是個相當關鍵的功能,它是負載平衡策略靈活性的最佳體現。雖然對於沒有軟體開發基礎的技術同仁來說,指令碼編寫可能是一個“噩夢”,面對著那“神奇”的字串,敝人也感同身受。為此,我搜集了一些指令碼範例,特別是針對常用的HTTP流量的最佳化,為大家做個借鑒。
範例一:將HTTP的請求自動轉換為HTTPS。這個指令碼比較簡單,但在很多電商網站或基於HTTPS訪問的客戶會用得比較多。
when HTTP_REQUEST {
HTTP::redirecthttps://[HTTP::host][HTTP::uri]
}
指令碼說明:只要負載平衡收到HTTP的請求包,就以HTTP重新導向的方式轉換為HTTPS://加上網域名稱和路徑。
範例二:根據用戶端請求的URI路徑不同,分發至指定的伺服器組pool)。在一些客戶的業務設計中,後台只有一台物理伺服器同一個IP地址同一個服務連接埠),但可根據路徑的不同發布不同的業務,這時候就需要根據路徑的關鍵字來區分業務。
when HTTP_REQUEST {
if {[HTTP::uri] starts_with"/test1" } {
pool pool_server1
} elseif {[HTTP::uri] starts_with"/test2" } {
pool pool_server2
} else } {
pool pool_server
}
}
指令碼說明:當用戶端請求的路徑為“/test1”則分配給server1,當用戶端請求的路徑為“/test2”則分配給server2,其它請求都轉寄至預設的伺服器組。
範例三:根據用戶端瀏覽器預設語言設定自動選取對應國家語言的伺服器叢集。
when HTTP_REQUEST {
if { [HTTP::headeraccept-language] contains “es” } {
poolSpanish
} elseif { [HTTP::headeraccept-language] contains “ja” } {
poolJapanese
} elseif { [HTTP::headeraccept-language] contains “zh” } {
pool Chinese
} else {
poolEnglish
}
}
650) this.width=650;" src="http://img1.51cto.com/attachment/201309/215635627.jpg" title="aflex2.jpg" alt="215635627.jpg" />
範例四:判斷某虛擬伺服器某連接埠業務vport)的當前連結數,超過閥值後重新導向到指定頁面!~既能保護後台伺服器,也能在接收到異常的大並發串連時提供友好的備份服務。
when HTTP_REQUEST {
set total1 [STATS::get virtual-servervs_192.168.111.45 8080 http current-connection]
if { $total1 > 100 } {
HTTP::redirect"http://www.163.com/"
}
}
指令碼說明:當訪問虛擬伺服器192.168.111.45的8080連接埠的並發串連數大於100,後續請求都重新導向至其他可訪問的網站,如www.163.com
範例五:根據HTTP報文頭的sessionID來做會話保持。某些網站是不能簡單的採用源IP會話保持的策略,在開發時採用sessionID來標示會話資訊。通過HTTPwatch工具,查看到客戶的sessionID 是藏於cookies中:
Cookie內容:
ASP.NET_SessionId=rrwjbhbv1w4qgm553usoqqq3;MyCook=visitCount=1
使用以下指令碼,在URI中尋找“ASP.NET_SessionId”欄位,就可以擷取到sessionID,並進行會話保持。
when HTTP_REQUEST {
set session_id [findstr[HTTP::uri] "ASP.NET_SessionId=" 18 ";"]
if { ( $session_id eq"" ) and ( [HTTP::cookie exists ASP.NET_SessionId] ) } {
set session_id[HTTP::cookie ASP.NET_SessionId]
}
if { $session_id ne"" } {
persist uie $session_id
}
}
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/111621M17-1.jpg" style="float:none;" title="aflex1.jpg" alt="215658948.jpg" />
以上只是在HTTP環境中會經常遇到的指令碼應用,指令碼工具的強大遠不止於此,藉此也希望更多的技術同仁能領略指令碼工具的魅力所在,編寫出更具Power的指令碼範例,大家共同進步。
ZJM)