当前是客户端登录软件后台获取不到客户的真实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

最新文章

  1. 【Python基础学习六】函数
  2. 客户端使用java,服务端使用c++的corba编程环境搭建
  3. 【架构】linkerd:来自Twitter为微服务而生的开源RPC解决方案
  4. JS图片加载失败显示默认图片
  5. Air Raid(最小路径覆盖)
  6. 转:关于Apache与Nginx的优势比较(经典)
  7. 设计模式_Facade_门面模式
  8. iis认证方式
  9. VS2010中使用CL快速 生成DLL的方法
  10. 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
  11. js 实现table每列可左右拖动改变列宽度 【转载】
  12. Android 项目配置 gitlab-ci 持续集成
  13. 使用python编辑和读取word文档
  14. Navicat操作SQL server 2008R2文件.bak文件还原
  15. python 多进程/多线程/协程 同步异步
  16. 小程序 lazy-load 不生效的问题
  17. Lab 9-2
  18. 修复python命令行下接收不到参数的问题
  19. linux 常见音乐、视频播放器简介
  20. Extjs4.x MVC开发模式,效率提高的两大秘诀

热门文章

  1. RobotFrameWork 自动化环境搭建(基于 python2.7)
  2. 使用Jexus 容器化您的 Blazor 应用程序
  3. TCP 可靠传输
  4. thinkphp历史漏洞
  5. js上传文件过大导致上传失败原因以及解决办法
  6. matlab基础知识总结
  7. Coursera课程笔记----P4E.Capstone----Week 2&3
  8. STM32 CubeIDE无法进行调试的问题
  9. STM32 串口USART DMA方式发送接收数据
  10. [UVA Live 12931 Common Area]扫描线