• 深入nginx之《获取用户的真实IP》


    获取用户的真实IP

            Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离。

            目前互联网公司基本上都采用这种架构方式:

            用户的请求并不是直接和Nginx交互,而是通过了CDN加速平台。默认情况下,Nginx看到的$remote_addr是CDN的IP,这对日志的记录和分析,还有后端的业务逻辑都可能产生不良的影响,如果需要获取到用户的真实IP呢,这个时候realip模块就起到了作用。

            此模块需要编译时开启:

            --with-http_realip_module

            在Nginx的HTTP块里面配置:

            set_real_ip_from CDN_IP;

            real_ip_header X-Forwarded-For;

            real_ip_recursive on;

       

         set_real_ip_from

            设置哪些IP是可信任的,从这些IP进行获取请求头信息,这些IP就配置为CDN的IP白名单。

        real_ip_header

            定义从哪个请求头获取IP信息,其值将用于替换客户端地址。一般都使用X-Forwarded-For。

        real_ip_recursive

            如果启用递归搜索,将会对可信任的IP匹配,原始客户端地址将替换为在请求头域中发送的最后一个不可信地址。如果禁用递归搜索,则从白名单中由real_ip_header指令定义的请求头中的最后一个地址替换。

            通过此方式就可以获取到CDN传递给Nginx的用户的IP。那么问题来了,$remote_addr被替换成了用户的IP,有些时候我们也希望获取到CDN 的节点IP,这对于排查一些和CDN有关的问题是由帮助的。可以使用$realip_remote_addr,它可以保留原始客户端地址。 (1.9.7版本新增的变量)

  • 相关阅读:
    车辆调度管理系统开发(八)
    车辆调度管理系统开发(七)
    车辆调度管理系统开发(六)
    车辆调度管理系统开发(五)
    车辆调度管理系统开发(四)
    设计模式
    webpack配置
    ECharts 配置语法
    react性能
    web安全
  • 原文地址:https://www.cnblogs.com/dtdxrk/p/9438507.html
Copyright © 2020-2023  润新知