ITPub博客

首页 > 数据库 > 数据库开发技术 > ?Nginx 中获取客户端 ip 相关的问题

?Nginx 中获取客户端 ip 相关的问题

原创 数据库开发技术 作者:云原生运维技术 时间:2023-02-20 20:00:00 0 删除 编辑

通常情况下讲,我们的客户端可以采用 remote_addr 的 http 头获取客户端的 ip,但是在世实际使用过程中,我们会发现中间通常会有多层级别的代理 ip,因此真正服务端就无法通过该 header 获取真实的客户端 ip 了。

如今,一般中间层代理通常都会使用 Nginx 相关的服务来做 7 层的代理,因此一般会在代理过程中通过一系列的头设置相关的变量,从而将最原始的客户端 ip 透传到最终的服务端。

x_forwarded_for 简称 XFF 头,它代表客户端,也就是 HTTP 的请求端真实的 IP,只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述,当你使用了代理时,web 服务器就不知道你的真实 IP 了,为了避免这个情况,代理服务器通常会增加一个叫做 x_forwarded_for 的头信息,把连接它的客户端 IP (即你的上网机器 IP) 加到这个头信息里,这样就能保证网站的 web 服务器能获取到真实 IP

X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3

X-Forwarded-For 一般是每一个非透明代理转发请求时会将上游服务器的 IP 地址追加到 X-Forwarded-For 的后面,使用英文逗号分割X-Real-IP 一般是最后一级代理将上游 IP 地址添加到该头中X-Forwarded-For 是多个 IP 地址,而 X-Real-IP 是一个

验证相关请求参数

### Nginx Proxy
192.168.107.107 nginx.conf
location /test {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://192.168.107.112:8080;
}
192.168.107.112 nginx.conf
location /test {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://192.168.107.114:8080;
}

### Nginx Backend
192.168.107.114 nginx.conf
location /test {
    default_type text/html;
    charset gbk;
    echo "$remote_addr ||$http_x_real_ip  ||$http_x_forwarded_for";
}

通过上述三层 Nginx 的服务,可以验证 remote_addr http_x_real_ip http_x_forwarded_for 三者之间的区别和联系。



原文作者:云原生运维技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-01-18

  • 博文量
    53
  • 访问量
    20336