zoukankan      html  css  js  c++  java
  • Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解

    $remote_addr

    代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。假设用户请求过程如下:

    用户客户端--发送请求->Nginx1 --转发请求-->Nginx2->后端服务器
    

    那么,默认情况下,针对Nginx1而言,$remote_addr为用户客户端IP,对Nginx2而言,$remote_addr则为Nginx1的IP。此时如果希望Nginx2也可以获取用户客户端IP,那要怎么处理呢?答案如下:

    在Nginx1配置文件中使用proxy_set_header为转发请求设置请求头

    proxy_set_header X-Real-IP $remote_addr; // X-Real-IP 为请求头名称,可自定义
    

    然后,在Nginx2 配置文件中通过$http_x_real_ip来获取X-Real-IP请求头的值来获取真实客户端IP.

    此时,如果要求“后端服务器”也要获取用户客户端IP,咋处理呢?做法和上述类似,在Nginx2配置文件中,使用proxy_set_header做同样的配置,即:

    proxy_set_header X-Real-IP $remote_addr; 
    

    然后,“后端服务器”获取请求头“X-Real-IP”的值即为用户客户端IP。

    很多HTTP代理会在HTTP协议头中添加X-Forwarded-For头,用来追踪请求的来源。X-Forwarded-For的格式如下:

    X-Forwarded-For包含多个IP地址,每个值通过逗号+空格分开,最左边(client1)是最原始客户端的IP地址,中间如果有多层代理,每一层代理会将连接它的客户端IP追加在X-Forwarded-For右边。

    $proxy_add_x_forwarded_for

    代表附加$remote_addr变量的客户端请求头X-Forwarded-For ,其值如果包含多个地址,用逗号+空格分隔,标准格式如下:

    X-Forwarded-For: clientIP, proxyIP1, proxyIP2 # 最左边的clientIp即为客户端真实IP
    

    如果X-Forwarded-For字段没出现在客户端请求头,$proxy_add_x_forwarded_for 等同于$remote_addr 变量。

    这里,假设用户请求过程和上文所述一样,如下:

    用户客户端--发送请求->Nginx1 --转发请求-->Nginx2->后端服务器
    

    假设,仅在Nginx1配置文件中进行了以下配置

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

    那么,Nginx2配置的X-Forwarded-For请求头的值即为clientIP当然,这个结论的前提是,客户端IP没有配置X-Forwarded-For请求头,因为如上所述,客户端没有出现这个请求头时,$proxy_add_x_forwarded_for 的值即为$remote_addr 变量的值,否则,则是客户端为X-forwarded-for请求头的实际值

    接着,假设Nginx2配置文件也进行以下配置

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

    那么,“后端服务器”获取的X-Forwarded-For请求头的值将为clientIP, Nginx1IP。也就是说以上命令的执行是个叠加的过程(类似Python的列表的append方法的处理过程),可以简单理解为如果存在上级代理,执行以上命令时,会把上级代理IP追加到X-Forwarded-For请求头总,否则把客户端IP $remote_addr、或者客户端X-Forwarded-For请求头的值(如果有的话)追加到X-Forwarded-For请求头中。

    参考连接:

    https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr

    https://nginx.org/en/docs/http/ngx_http_proxy_module.html#var_proxy_add_x_forwarded_for

    作者:授客
    QQ:1033553122
    全国软件测试QQ交流群:7156436

    Git地址:https://gitee.com/ishouke
    友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
    作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
               微信打赏                        支付宝打赏                  全国软件测试交流QQ群  
                  

  • 相关阅读:
    Zabbix3.2监控Windows的内存使用百分比并在内存使用率超过85%的时候触发报警
    zabbix监控 linux/windows 主机tcp连接状态
    Exchange2016 & Skype for business 集成之三统一联系人存储
    Exchange2016 & Skype for business集成之二 OWA集成IM
    Exchange2016 & Skype for business 集成之一配置合作伙伴应用程序
    Office Online Server 2016 部署和配置
    Skype for Business 安装组件RewriteModule失败
    Exchange Server 2016 安卓手机打不开超过10M的附件问题处理
    Exchange Server 2016 管理邮箱收发限制
    static修饰类的作用
  • 原文地址:https://www.cnblogs.com/shouke/p/15511149.html
Copyright © 2011-2022 走看看