阿裡雲伺服器使用SLB後如何擷取真實IP(使用LVS等負載均衡方案之後如何擷取真實的IP)
其實不用那麼複雜,SLB伺服器會把客戶的真實IP記錄在http頭X_FORWARDED_FOR 字段中。
實際apache和nginx都是可以直接讀取http頭中任何字段值的,是以可以在logformat中配置X_FORWARDED_FOR 這個字段,測試情況如下:
Apache:
日志格式配置

LogFormat “‘realip:’%{X-Forwarded-For}i ‘slbip:’%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
重新開機apache後測試可以擷取到真實IP,情況如下:

其中有realip還是-的記錄,記錄是SLB伺服器健康檢查的記錄并不是客戶通路的記錄,可以忽略。
Nginx
日志配置情況如下:

log_format main ‘realip:$http_x_forwarded_for slbip:$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
測試後可以擷取真實的IP,情況如下:

同上,沒擷取到realip的都是健康檢查的記錄,不是客戶通路的記錄,可以忽略。
這個方法非阿裡雲官方提供的,我在自己的幾台伺服器測試都完全沒問題,不知道阿裡雲官方處于什麼目的沒有推薦這種方法。
應該有一些弊端吧,總之,如果這種方法你測試可以滿足你的需求,那麼你可以嘗試一下~~
本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/1934419