Django如何获取前端请求的真实IP

REMOTE_ADDR

表示发出请求的远程主机的 IP地址,
remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的
当你的浏览器访问某个网站时,

  • 假设中间没有任何代理,那么网站的web服务器就会把remote_addr设为你的机器IP,
  • 如果你用了某个代理(nginx代理,api网关等),那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP
HTTP_X_FORWARDED_FOR
  • 简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP
  • 如果存在多级代理,那么x_forwarded_for将会存储多个值,中间用英文逗号隔开 如:‘192.168.2.12,53.33.2.12’。
示例代码
if request.META.get('HTTP_X_FORWARDED_FOR'):
    ip = request.META.get('HTTP_X_FORWARDED_FOR')
else:
    ip = request.META.get('REMOTE_ADDR')
# 当有多级代理时,HTTP_X_FORWARDED_FOR返回多个IP,取第一个即可。
if ip:
    ip = request.split(',')[0]
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值