添加nginx新模塊,獲取客戶真實ip


當前是客戶端登錄軟件后台獲取不到客戶的真實ip而是雲盾的代理ip

為了獲取到真實ip后來發現通過配置nginxread_ip模塊就可以了

 

獲取客戶的真實ip使用Nginxrealip模塊

Nginx處在HAProxy后面時,就會把remote_addr設為HAProxyIP,這個值其實是毫無意義的,可以通過nginxrealip模塊,讓它使用x_forwarded_for里的值。使用這個模塊需要重新編譯Nginx,增加--with-http_realip_module參數

 

1,官網下載一個新的nginx包,最后和原有環境的包的版本最好一至

目前系統版本,及已有的模塊(安裝新模塊時這些需要重新編譯)

下載地址:http://nginx.org/en/download.html

 

[root@web01 local]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.4.7

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

TLS SNI support enabled

configure arguments: --with-http_ssl_module --with-http_stub_status_module

 

nginx安裝目錄放在了/usr/local/目錄下

編譯安裝新模塊時--with-http_realip_module(訪問nginx是可以得到真實客戶真實ip

安裝只要make就行,不要make install

 

2,備份原nginx下的sbin/nginx二進制文件,把新生成的移過去

編譯之后目錄下會有一個objs的目錄,新的nginx二進制文件就在此目錄下

[root@web01 nginx-1.4.7]# cd objs/

cp nginx /usr/local/nginx/sbin/

 

之后再檢查目前的最新模塊,已經有了--with-http_realip_module

[root@web01 local]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.4.7

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

TLS SNI support enabled

configure arguments: --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module

 

3,修改配置文件

server下添加

set_real_ip_from   59.56.19.0/24;(代理ip網段)

real_ip_header     X-Forwarded-For;

 

說明:設置IP源的時候可以設置單個IP,也可以設置IP段,另外是使用X-Real-IP還是X-Forwarded-For,取決於前面的服務器有哪個頭。我這里設置的是X-Forwarded-For

 

4,重啟nginx

[root@sweb01 vhost]# /usr/local/nginx/sbin/nginx -s stop

[root@sweb01 vhost]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

之后再次登錄客戶端訪問后台就可以看到客戶的真實ip而不是代理ip

 

 

 

 

解釋:

 

X-Forwarded-ForX-Real-ip的區別

 

X-Forwarded-For是用於記錄代理信息的,每經過一級代理(匿名代理除外),代理服務器都會把這次請求的來源IP追加在X-Forwarded-For

X-Real-IP,一般只記錄真實發出請求的客戶端IP

 

 

 

什么是remote_addr

 

remote_addr代表客戶端的IP,但它的值不是由客戶端提供的,而是服務端根據客戶端的ip指定的,當你的瀏覽器訪問某個網站時,假設中間沒有任何代理,那么網站的web服務器(NginxApache等)就會把remote_addr設為你的機器IP,如果你用了某個代理,那么你的瀏覽器會先訪問這個代理,然后再由這個代理轉發到網站,這樣web服務器就會把remote_addr設為這台代理機器的IP

 

什么是x_forwarded_for

 

正如上面所述,當你使用了代理時,web服務器就不知道你的真實IP了,為了避免這個情況,代理服務器通常會增加一個叫做x_forwarded_for的頭信息,把連接它的客戶端IP(即你的上網機器IP)加到這個頭信息里,這樣就能保證網站的web服務器能獲取到真實IP

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM