天天看點

CDN加速下通過nginx擷取網站訪客真實IP

CDN加速下通過nginx擷取網站訪客真實IP

一:安裝realip子產品

nginx -V看看有沒有安裝,沒有就單獨編譯安裝下,有就直接修改nginx的配置即可。

如果沒有,就進nginx檔案夾去編譯: —with–http_realip_module

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --with-http_geoip_module --with-http_realip_module  
#就是加上--with-http_realip_module
make && make install
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/ nginx.pid.oldbin`
#改日志           

然後nginx -V檢測下有沒有安裝好。

二、修改nginx.conf配置檔案

1:在http區域增加:

log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' 
                    '$status $body_bytes_sent "$http_referer" ' 
                   '"$http_user_agent" ';           

主要就是增加x-forwarded-for字段,如果沒有上面這一段,就自己把這個複制進去也行。

2:在server區域增加:

set_real_ip_from CDNip1.0/24;  #整個IP段
  set_real_ip_from 源站ip;
  set_real_ip_from 127.0.0.1; #伺服器本地
  real_ip_header    X-Forwarded-For;
  real_ip_recursive on;           

set_real_ip_from擷取ip位址,real_ip_header就是從header頭檢索ip,real_ip_recursive on擷取ip,然後開始排除上面的ip,就顯示出剩下的ip。

以上方法,有個不好的事情,就是CDNIP太多了,如果不能直接拿到,就得一次次的檢測出ip來加上去。

還有一種方法:

log_format 域名 '$remote_addr - $remote_user [$time_local] $request'

'$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" "$http_x_forwarded_for"';           

access_log /usr/local/nginx/logs/域名 域名; 日志

其實也算是通過http_x_forwarded_for來擷取,隻是讀取的時候不一樣。

因為後端真實伺服器通過http_x_forwarded_for來擷取,預設第一個不為unkown的ip就是訪客的真實ip。

在server區域其實不用管了,預設配置的nginx.conf檔案都有的。

第二種方法呢,就需要修改網站本身程式了,修改程式去讀取第一個ip就行。

如果是不能修改網站本身程式,就還是用第一種方法吧。

三、測試訪客ip

如果以上兩種方法都用上了,可以寫個php檔案

<!--?php 
echo $_SERVER['REMOTE_ADDR'];  //通過讀取real_ip_recursive來檢視ip
echo "&lt;br ?-->";
echo $_SERVER["HTTP_X_FORWARDED_FOR"];  //通過讀取HTTP_X_FORWARDED_FOR來檢視ip
?&gt;              

real_ip_recursive隻會擷取到目前的一個ip,HTTP_X_FORWARDED_FOR一般會讀取到2個ip,第一個是真是ip,第二個是CDNip。

通過以上方法排除CDNip之後,我們就可以統計真實訪客的ip了,當然也可以通過這個結合GeoIP子產品屏蔽部分地區的ip通路網站。