怎樣獲取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伺服器的地址。