nginx——如何访问源地址(即获取用户的ip地址)

在使用nginx作为反向代理时,服务端无法直接获取到客户端的真实IP。本文介绍了nginx中的remote_addr、X-Forwarded-For和X-Real-IP变量以及realip_module模块,通过配置该模块可以从X-Forwarded-For头中提取用户真实IP,确保在反向代理场景下正确获取用户IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 什么叫做nginx反向代理获取客户端的真实IP

我们访问互联网的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理
反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略
这样在服务端拿到的客户端IP将是反向代理IP,而不是真实客户端IP,因此需要想办法来获取到真实客户端IP
在这里插入图片描述
相连的两个ip是相互信任的

2.为什么服务端要解析客户端ip呢

前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式来实现接口跨域的方式
在降低开发成本的的同时也带来了诸多问题,例如客户端真实ip的获取
在一些特殊场景下,比如风控和支付流程,往往需要获取用户的ip信息,但是nginx的反向代理实现跨域的同时
也彻底改变了服务器的请求来源,隔离了用户和服务器的连接这并不是我们想要的,因此对于客户端ip的解析是必要的

3.介绍nginx中的几个变量

(1)remote_addr

代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的
当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)
就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站
这样这台代理机器的IP就是remote_addr,除非代理将你的IP附在请求header中一起转交给web服务器

(2)X-Forwarded-For(简称XFF)

X-Forwarded-For 是一个 HTTP 扩展头部,它最开始是由 Squid 这个缓存代理软件引入用来表示 HTTP 请求端真实 IP,如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用并被写入 RFC 7239(Forwarded HTTP Extension)标准之中 XFF的格式为X-Forwarded-For: client, proxy1, proxy2 XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP (注意:如果未经严格处理,可以被伪造) 如果一个 HTTP 请求到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值