添加nginx新模块,获取客户真实ip
当前是客户端登录软件后台获取不到客户的真实ip而是云盾的代理ip
为了获取到真实ip后来发现通过配置nginx的read_ip模块就可以了
获取客户的真实ip使用Nginx的realip模块
当Nginx处在HAProxy后面时,就会把remote_addr设为HAProxy的IP,这个值其实是毫无意义的,可以通过nginx的realip模块,让它使用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-For和X-Real-ip的区别
X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中
X-Real-IP,一般只记录真实发出请求的客户端IP
什么是remote_addr
remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。
什么是x_forwarded_for
正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP
最新文章
- 【Python基础学习六】函数
- 客户端使用java,服务端使用c++的corba编程环境搭建
- 【架构】linkerd:来自Twitter为微服务而生的开源RPC解决方案
- JS图片加载失败显示默认图片
- Air Raid(最小路径覆盖)
- 转:关于Apache与Nginx的优势比较(经典)
- 设计模式_Facade_门面模式
- iis认证方式
- VS2010中使用CL快速 生成DLL的方法
- 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
- js 实现table每列可左右拖动改变列宽度 【转载】
- Android 项目配置 gitlab-ci 持续集成
- 使用python编辑和读取word文档
- Navicat操作SQL server 2008R2文件.bak文件还原
- python 多进程/多线程/协程 同步异步
- 小程序 lazy-load 不生效的问题
- Lab 9-2
- 修复python命令行下接收不到参数的问题
- linux 常见音乐、视频播放器简介
- Extjs4.x MVC开发模式,效率提高的两大秘诀