怎樣獲取CDN上使用者真實IP地址

使用nginx -V 檢視一下nginx 引數中有沒有--with-http_realip_module

[root@aliyun cnyunwei]# nginx -V nginx version: nginx/1.10.1 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)    built with OpenSSL 1.0.2h 3 May 2016   TLS SNI support enabled   configure arguments: --prefix=XXXXXX --with-http_realip_module XXXXXX

   

預設是不安裝該模組的,所以如果檢測出來沒有這個模組就需要重新編譯了,重新編譯也非常方便,即使是線上不能停機當然也可以編譯,平滑升級即可。

進入nginx 原始碼安裝包目錄下 configure 的引數就和原來保持一樣,只是增加一個--with-http_realip_module  例如:--prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module make && make install  至於平滑升級,可直接執行 killall -s USR2 nginx

   

接下來是編輯對應的配置檔案設定

location 中加入以下資訊: set_real_ip_from 222.222.222.222; #這裡是需要填寫具體的CDN伺服器IP地址 real_ip_header X-Forwarded-For; real_ip_recursive on;

   

寫一個測試頁面來檢測讀取的訪問IP地址是否已經獲取到了使用者IP地址 vim ip.php

< ?php  echo "Welcome cnyunwei.cc !";  echo ' server_addr : ';  echo $_SERVER['SERVER_ADDR'];  echo 'remote_addr : ';  echo $_SERVER['REMOTE_ADDR'];  echo 'host : ';  echo $_SERVER['HTTP_HOST'];  ?>

   

下面即可直接訪問測試,remote_addr 是否為你當前的公網IP地址,然後修改本地電腦hosts 重定向到CDN伺服器再測試驗證IP地址是否正確讀取,如果正確的情況訪問日誌中也會正確顯示對應的來訪IP地址而不是CDN伺服器的地址。