得到客戶端IP本來是一個很是簡單的事情,程序裏不少時候使用REMOTE_ADDR環境變量就能夠了,但隨着網絡結構複雜性愈來愈高,好比說Apache前有Nginx,或者Nginx前有Squid,這時就複雜了,還得考慮諸如:HTTP_CLIENTADDRESS,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR等環境變量,固然能夠經過編寫程序代碼來處理此類邏輯,不過這樣的解決方法不夠透明,畢竟不少第三方程序並無考慮這些狀況,並且後面服務器的日誌裏面記錄的IP全變成了前面服務器的IP,如此一來,Awstats之類的軟件就失效了。下面看看如何透明處理:
案例1:Apache前有Nginx
有些網站使用這樣的方式來分離靜態請求和動態請求,Nginx放在前面處理靜態請求,而後再把動態請求轉發給後面的Apache,不過如此一來,Apache日誌裏看到的IP就是Nginx的IP了,爲了能讓Apache透明獲取IP,能夠使用mod_rpaf :
配置很簡單,只需在配置文件里加上以下內容:
LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.0.1
RPAFheader X-Forwarded-For
說明:192.168.0.1指的是Nginx內網IP,能夠設置多個IP。
最後確認一下Nginx配置文件裏在把動態請求轉發給Apache的時候是否設置了以下內容:apache
閱讀全文>>服務器