x-forward-for详解

x-forward-for详解
如今利⽤nginx做负载均衡的实例已经很多了,针对不同的应⽤场合,还有很多需要注意的地⽅,本⽂要说的就是在通过CDN 后到达nginx 做负载均衡时请求头中的X-Forwarded-For项到底发⽣了什么变化。下图为简单的web架构图:
先来看⼀下X-Forwarded-For的定义:
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发⽂档中可以到该项的详细介绍。
乌鲁克标准格式如下:
郑州大学
X-Forwarded-For: client1, proxy1, proxy2
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间⽤逗号分隔,第⼀项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过⼏个就会出现⼏个。
按照上图的Web架构图,可以很容易的看出,当⽤户请求经过CDN后到达Nginx负载均衡服务器时,其X-
Forwarded-For头信息应该为客户端IP,CDN的IP 但实际情况并⾮如此,⼀般情况下CDN服务商为了⾃⾝安全考虑会将这个信息做些改动,只保留客户端IP。我们可以通过php程序获得X-Forwarded-For信息或者通过Nginx的add header⽅法来设置返回头来查看。
下⾯来分析请求头到达Nginx负载均衡服务器的情况;在默认情况下,Nginx并不会对X-Forwarded-For头做任何的处理,除⾮⽤户使⽤proxy_set_header 参数设置:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr⽤逗号分开,如果没有"X-Forwarded-For" 请求头,则$proxy_add_x_forwarded_for等于$remote_addr。
龙牙星
$remote_addr变量的值是客户端的IP
当Nginx设置X-Forwarded-For等于$proxy_add_x_forwarded_for后会有两种情况发⽣
1、如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发⽣),⽽到了我们这⾥Nginx设置将其设置为
$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,因为相对于Nginx负载均衡来说客户端即为CDN,这样的话,后端的web程序时死活也获得不了真实⽤户的IP的。
多媒体技术的发展
2、CDN设置了X-Forwarded-For,我们这⾥⼜设置了⼀次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成”客户端IP,Nginx负载均衡服务器IP“如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第⼀项即可。如上两点所说,如果我们知道了CDN设置了X-Forwarded-For信息,且只有客户端真实的IP的话,那么我们的Nginx负载均衡服务器可以不必理会该头,让它默认即可。
其实Nginx中还有⼀个$http_x_forwarded_for变量,这个变量中保存的内容就是请求中的X-Forwarded-For信息。如果后端获得X-Forwarded-For信息的程序兼容性不好的话(没有考虑到X-Forwarded-For含有多个IP的情况),最好就不要将X-Forwarded-For设置为$proxy_add_x_forwarded_for。应该设置为$http_x_forwarded_for或者⼲脆不设置!
另在不同的代理情况下,其中x-forward-for的情况
对于这三个值:REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR 来说,可以分以下五种情况:
⼀、没有使⽤代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显⽰
HTTP_X_FORWARDED_FOR = 没数值或不显⽰
⼆、使⽤透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后⼀个代理服务器 IP
HTTP_VIA = 代理服务器 IP行波进位加法器
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163,
203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,⽆法达到隐藏真实⾝份的⽬的。
三、使⽤普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后⼀个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163,
203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使⽤代理服务器访问他们的。
四、使⽤欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
穿过骨头抚摸你HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163,
203.129.72.215。
告诉了访问对象您使⽤了代理服务器,但编造了⼀个虚假的随机IP代替您的真实IP欺骗它。
五、使⽤⾼匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显⽰
HTTP_X_FORWARDED_FOR = 没数值或不显⽰,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
完全⽤代理服务器的信息替代了您的所有信息,就象您就是完全使⽤那台代理服务器直接访问对象。

本文发布于:2024-09-23 18:33:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/164605.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议