X-forward-For获取客户端IP原理

2024-04-15 19:12:30 浏览数 (2)

通过x-forward-for获取到一个ip列表,通过逗号进行了隔离。

X-Forward-For:clientIP, server1IP, server2IP, server3IP;

从左往右就是客户端请求到最后的ip列表,所以第一个就是客户端ip。

假设反向代理是比如nginx,nginx可以设置:

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

但是发起请求的ip带的x-forward-for可能被自己伪造,这个无解。但是发起请求的ip不能被伪造,因此,使用x-real-ip设置为remote-add,将remote-add拼接到x-forward-for后面。

那么如何杜绝这种现象,既然携带的x-forward-for靠不住,那最外层nginx直接不用了,使用

proxy_set_header X-Forwarded-For $remote_addr;

直接获取真实ip,并赋值给x-forward-for。

最外层以外的在自己的可控范围之内,可以继续使用 $proxy_add_x_forwarded_for;

其他反向代理,比如apache,IIS6,IIS7没怎么用过,不太了解,待分析。

0 人点赞