天天看點

使用LVS或者阿裡雲的SLB後如何擷取訪客真實的IP位址

阿裡雲伺服器使用SLB後如何擷取真實IP(使用LVS等負載均衡方案之後如何擷取真實的IP)

其實不用那麼複雜,SLB伺服器會把客戶的真實IP記錄在http頭X_FORWARDED_FOR 字段中。

實際apache和nginx都是可以直接讀取http頭中任何字段值的,是以可以在logformat中配置X_FORWARDED_FOR 這個字段,測試情況如下:

Apache:

日志格式配置

使用LVS或者阿裡雲的SLB後如何擷取訪客真實的IP位址

LogFormat “‘realip:’%{X-Forwarded-For}i ‘slbip:’%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

重新開機apache後測試可以擷取到真實IP,情況如下:

使用LVS或者阿裡雲的SLB後如何擷取訪客真實的IP位址

其中有realip還是-的記錄,記錄是SLB伺服器健康檢查的記錄并不是客戶通路的記錄,可以忽略。

Nginx

日志配置情況如下:

使用LVS或者阿裡雲的SLB後如何擷取訪客真實的IP位址

  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,情況如下:

使用LVS或者阿裡雲的SLB後如何擷取訪客真實的IP位址

同上,沒擷取到realip的都是健康檢查的記錄,不是客戶通路的記錄,可以忽略。

這個方法非阿裡雲官方提供的,我在自己的幾台伺服器測試都完全沒問題,不知道阿裡雲官方處于什麼目的沒有推薦這種方法。

應該有一些弊端吧,總之,如果這種方法你測試可以滿足你的需求,那麼你可以嘗試一下~~

本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/1934419

繼續閱讀