F5 透過 iRule 修改 http header

F5 是一個 L7 的負載平衡器。

在 F5 可以透過 iRule 來將特定網址導向到特定 pool(nodes),做負載平衡。
例如:

when HTTP_REQUEST {   

	switch [HTTP::host] {
		"mlwmlw.org" {
			pool webserver-pool
		}
	}
}

所以在 webserver-pool 的主機都會接收到來自 F5 的請求。所以在 PHP 裡面如果你檢查 $_SERVER[‘REMOTE_ADDR’] 來當作使用者的IP,就會看到 F5 的 IP,真實的 IP 被另外放在 HTTP_X_FORWARDED_FOR 了。

所以你懶得改程式,想要透過 F5 動手腳讓 REMOTE_ADDR 不要是 F5 的 IP,這樣可行嗎?!

在 iRule 上另外加了一個事件,修改 http header。

when HTTP_REQUEST_SEND {
   clientside {
      HTTP::header insert REMOTE_ADDR "[IP::client_addr]"
   }
}

太棒了!你多了一個 $_SERVER[‘HTTP_REMOTE_ADDR’] 能用…(翻桌)

因為 REMOTE_ADDR 是 CGI 送來的變數,不是 http_header,所以要在 apache 裡面動手腳。

可能透過類似這種模組 http://stderr.net/apache/rpaf/ 來修改 apache 傳到 php 的值吧…有點麻煩算了……

參考資源
http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/50/aft/5365/showtab/groupforums/Default.aspx
http://support.f5.com/kb/en-us/solutions/public/4000/800/sol4816.html

2 comments on “F5 透過 iRule 修改 http header

  1. 不好意思想請教一個問題,
    如果經過F5以後,HTTP的header沒有帶X-Forwarded-For的話(從phpinfo看的),是不是F5的設定的問題呢?還apache端的問題? 不好意思。

    1. 1.
      設定 Virtual Server 的 http profile,enable Insert X-Forwarded-For

      2.
      用文章中的 iRule 自己插一個 header 名字就能自取了

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *