通过Nginx获取用户ip

X-Forwarded-For,X-Real-Ip

X-Forwarded-For的格式:
X-Forwarded-For: client, proxy1, proxy2

说明:
client指用户机的ip,或请求来源的最初的机器的ip
proxy1指一级代理
proxy2指二级代理

例如:
X-Forwarded-For:192.168.247.1, 192.168.247.131, 192.168.247.132
X-Real-Ip的格式:
X-Real-Ip:10.119.137.3

只有一个,指请求到nginx的机器的ip
在一般情况下,就是没有使用代理的用户的ip

异同:

X-Forwarded-For后面的ip可以有一个或多个

X-Real-Ip只有一个,并且一定和X-Forwarded-For的最后一个ip相同

对于 Web 应用来说,X-Forwarded-For 和 X-Real-IP 就是两个普通的请求头,自然就不做任何处理原样输出了。这说明,对于直连部署方式,除了从 TCP 连接中得到的 Remote Address 之外,请求头中携带的 IP 信息都不能信。

但是可以通过nginx将Remote Address设置为X-Real-Ip,并将其设置为X-Forwarded-For的最后一个,而这些内容将是完全可信的.

注意:X-Forwarded-For 最后一节是 Nginx 追加上去的,但之前部分都来自于 Nginx 收到的请求头,这部分用户输入内容完全不可信,不可信,不可信.

proxy_set_header   X-Forwarded-For  $x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;

这样后端应用就可以从请求头中的X-Real-Ip获取需要的ip

发布了37 篇原创文章 · 获赞 1 · 访问量 1066

猜你喜欢

转载自blog.csdn.net/zhuchencn/article/details/102533918