一般的 reverse proxy 都不是 reverse NAT,所以 Apache 端必須要做一些處理才能拿到正確的使用者 IP Address,一般都是以 X-Forwarded-For 欄位做為判斷的標準,不過這樣的缺點是 PHP 必需要自己判斷。
mod_extract_forwarded2 就是直接把可信任來源的 X-Forwarded-For 替代成使用者端的 IP Address,如此一來 PHP 的程式不需要改變程式碼,與以前一樣只需要用
但 FreeBSD 下的 mod_extract_forwarded2 安裝完後其實是有問題的,安裝完後的設定是:
但應該改成:
然後對 reverse proxy 的 IP Address 設定:
你可以寫個小程式,從不同 IP Address 帶
mod_extract_forwarded2 就是直接把可信任來源的 X-Forwarded-For 替代成使用者端的 IP Address,如此一來 PHP 的程式不需要改變程式碼,與以前一樣只需要用
$_SERVER["REMOTE_ADDR"]
就可以取得使用者的 IP Address。但 FreeBSD 下的 mod_extract_forwarded2 安裝完後其實是有問題的,安裝完後的設定是:
LoadModule extract_forwarded2_module libexec/apache22/mod_extract_forwarded2.so
但應該改成:
LoadModule extract_forwarded_module libexec/apache22/mod_extract_forwarded2.so
然後對 reverse proxy 的 IP Address 設定:
AddAcceptForwarder 10.0.0.100
你可以寫個小程式,從不同 IP Address 帶
X-Forwarded-For
參數,將 $_SERVER["REMOTE_ADDR"]
印出測試看看。Powered by ScribeFire.