添加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

原文地址:https://www.cnblogs.com/clllum/p/12980482.html