2013年7月2日 星期二

使用Stingray進行Domain Name分流

Scenario

許多人會遇到在一台Stingray底下,需要使用到相同Port建立不同的服務的情況,當Stingray綁訂多組IP時候,當然可以把來自不同ip的部分分別設定Virtural Server,但是若只有綁訂一組IP,Port重複使用的部份就是個頭痛的問題,這邊虛擬一個簡單的範例,如下圖所示:



如上圖,當Stingray只有Binding一組IP時候,三組DNS共用一組Domain Name,則需要透過Traffic Rule來進行流量的控制,Traffic Rule的內容大致上就是取出連線的Target端Domain Name,並且將該Traffic重導到適當的Pool...
在這個設定中,需要事先準備下面設定:
  1. 三組Pool,分別對應到要Group的Server
  2. 一組Virtual Server,對應到port 80,預設Pool可以設定為discard
  3. 設定Virtual Server上的Traffic Rule


Traffic Rule

進入Traffic Rule的編輯部分,在Input Traffic部分建立下面的規則:

#使用getHostHeader取出連線進入的domain name
$hostheader = http.getHostHeader();

#透過log確認是否是正確的規則
log.info("$hostheader:". $hostheader);

#撰寫連線規則
if($hostheader == ‘www1.abc.com’)
 pool.use( "www1_pool");
else if($hostheader == ‘www2.abc.com’)
 pool.use( "www2_pool");
else if($hostheader == ‘www3.abc.com’)
 pool.use( "www3_pool");

測試


當Virtual Server enable之後,則可以透過在你的連線主機上hard code hosts設定來達到可以連線www1.abc.com, www2.abc.com, www3.abc.com的效果,此時如果設定無誤,則可以正確的連線到您所指定的Pool中的主機。