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

  • 相关阅读:
    ASCII 说明
    用GDB调试程序
    手把手教你使用Matplotlib绘图|实战
    什么!Python还能帮你找老婆?
    词云图的几种制作方法评测,你pick哪款
    我常用的10个Python实用小Trick
    爬虫代码详解Python多线程、多进程、协程
    [转载] tomcat集群基于redis共享session解决方案
    集群/分布式环境下5种session处理策略
    java7特性之 try-with-resources
  • 原文地址:https://www.cnblogs.com/clllum/p/12980482.html
Copyright © 2020-2023  润新知