x-forwarded-for的深度挖掘


一、相关概念

proxy_set_header:将发送至upsream server的报文的某首部进行重写;

在nginx中我们可以通过这个指令将请求报文中的头部进行自定义

$remote_addr:客户端IP

它的值不是由客户端提供,而是服务端根据客户端的ip指定的,

这里指的客户端相对的,当你浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器就会把$remote_addr的值设为你机器的ip,如果你用了某个代理,那么你的浏览器会先访问这个代理然后再由这个代理转发的网站,这样web服务器就会把$remote_addr设为这台代理服务器的ip

二、利用nginx反向代理,后端Web如何获取真实客户端ip?

环境:

客户端:192.168.100.88

nginx代理:192.168.100.179

httpd2.2服务器:192.168.100.173(注意如果httpd版本是2.4的话,方法不同,重点不在这,这里不作考虑)

nginx服务器:192.168.100.180

nginx服务器:192.168.100.10

1.首先需要在nginx代理服务器上的配置文件nginx.conf上添加一行参数:

 location / {
 44             #root   html;
 45             proxy_pass http://192.168.100.173;
 46             proxy_set_header  X-Real-IP  $remote_addr;   #添加这行.通过定义X-Real-IP(自定义的名字,但是这里改了的话在后端nginx服务器上怎么设置才能获取到真实客户ip呢?)这个变量的值把真是客户端ip传递给后端web。
 47             index  index.html index.htm;
 48         }

注意:这一行加在http,server,location中都可以。

2.后端web配置

 1)对于后端是httpd,编辑的配置文件找到如下:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

将此行中的 ‘%h‘修改成 ‘%{X-Real-IP}i

LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" c
     ombined

再从客户端访问192.168.100.179,

查看httpd的访问日志:

此时后端httpd已经能记录客户端真实ip。

 1)对于后端是httpd,编辑的配置文件添加一行参数:

set_real_ip_from 192.168.100.179 ;

注意:

1、此时后端nginx编译时一定要加通过--with-http_realip_module添加ngx_http_realip_module模块才可以,否则会报配置语法错误,通过epel源yum安装的nginx已经添加了该模块。

2、ip为nginx代理服务器的ip地址,这一行加在http,server,location中都可以。

再从客户端访问192.168.100.179,查看后端nginx的访问日志,此时已经能记录客户端真实ip。

三、经过多次nginx反向代理后,后端Web如何获取真实客户端ip?

 通过X-Real-IP多次传递?

试了下也是可以的,那为啥都不用这个,不兼容haproxy和其它代理吗?

Nginx2设置:

location / {
 43             root   html;
 44             proxy_pass http://192.168.100.173;
 45            # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 46            set_real_ip_from 192.168.100.179;
 47            proxy_set_header  X-Real-IP  $remote_addr;
 48             index  index.html index.htm;
 49         }


再来学习下X-Forwarded-For:

先来看一下X-Forwarded-For的定义:
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,
标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,

第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个

当经过多个nginx代理时,其X-Forwarded-For头信息应该为客户端IP,Nginx1,Nginx2,、、、。

在默认情况下,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、如果从Nginx1过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了Nginx2设置将X-Forwarded-For设置为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的信息头应该为Nginx1的IP,因为相对于Nginx2负载均衡来说客户端即为Nginx1,这样的话,后端的web程序时死活也获得不了真实用户的IP的。

2、如果Nginx1设置了X-Forwarded-For,到了Nginx2我们这里又设置了一次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成 ”客户端IP,Nginx1负载均衡服务器IP“如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第一项即可。

如上两点所说,如果我们知道了Nginx1设置了X-Forwarded-For信息,且只有客户端真实的IP的话,那么我们的Nginx2负载均衡服务器可以不必理会该头,让它默认即可。

其实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或者干脆不设置!

时间: 2024-08-04 02:00:52

x-forwarded-for的深度挖掘的相关文章

8Manage:物流CRM,深度挖掘快递企业下一站蓝海!

[导读]网购的普及加快了快递物流服务在中国的发展,而物流行业也开始展露出自身巨大的发展潜力和进步空间.其中,作为物流行业根本核心的物流客户关系管理开始引起了管理者的注意,如何升级用户物流服务体验,把握客户,深度挖掘客户的物流需求,成为了快递企业下一步发展的关注点. 双11快递长蘑菇.奇葩的快递地址等等热词频繁登上热搜,这表明快递物流开始逐渐成为目前社会关注的热点.随着中国经济的不断发展,网购的不断普及与深入,消费的升级转型,快递业的配送也成为了用户购物的考虑标准,而其中的用户升级服务也成为了各大

深度挖掘互联网用户行为数据

http://passport.baidu.com/?business&un=%E4%BF%A1%E6%81%AF%E6%89%BE%E6%AD%A6%E5%AE%89%E5%B0%8F%E5%A6%B9#0 http://passport.baidu.com/?business&un=%E5%AD%A6%E7%94%9F%E5%A6%B9%E8%A1%A1%E6%B0%B4%E7%89%B9%E6%9C%8D#0 http://passport.baidu.com/?business&a

深度挖掘,Html5的 Range 滑动刻度的坑,兼容全平台,将任性进行到底!

最近2天一直在弄一个滑动的刻度效果,由于项目是基于Web App开发的,于是考虑到 移动端和pc端 的兼容性问题,考虑的比较多,尝试采用 Html5的Range 来做,目前已经兼容 pc端和移动端! 实现成果如下: Html5 Range,缺点: ---------------------------------------------------------------------------------------------- 1: 目前测试了(Chrome浏览器 和 iphone6 )滑

1)python,现在用过的,后面推出每日练习语法与深度挖掘应用

python 1, Mac 系统自带的python路径 /System/Library/Frameworks/Python.framework/Version里面存放多个版本 可通过:启动python import sys print sys.path 查看路径 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip 2, mac 里面可以启动idle新建.py 文件,然后打开cmd用Mac自带的 执行

QQ自动营销怎么样?流量星球:QQ营销机器人深度挖掘精准粉丝!

QQ自动营销什么? 就是登陆了自己的QQ账号,设置了自己需要的广告词.目标用户人数等,然后发送,关电脑,这就是所谓的QQ自动营销.是不是很神奇?这世上会有这么强大的功能吗? 还别说,真有! 近几年的微信群控听说过了吗?可谓是风靡一时啊,相信用了这套系统的朋友们都有狠狠的赚了一笔吧!微信群控不仅提高了广告的推送效率,还大量的减少了人力物力财力,只可惜,在去年的 7月份微信进行了大整改,对微信的管理机制变得更加严谨了,微信群控也渐渐的没落了! 如今,流量星球这个团队经过不断的深入研究和探讨,发现QQ

优云软件应邀参加“视频侦查与视频监控深度应用研修班”并作主题演讲

为推进全国公安机关视频监控系统联网建设,加强视频侦查技术深度应用,由公安部第一研究所<警察技术>杂志社主办的"全国公安机关视频监控建设与实战应用专题研修班"于2017年5月9日-12日在贵阳举行,研修班邀请了400余位来自全国各地各级公安机关负责视频监控建设及视频侦查工作的领导及业务骨干,学员们一起探讨视频监控相关产品及最新技术应用. 研修班会场 优云软件作为双态运维先行者.企业级运维专家,应邀参加本次研修班.会上向来自全国公安机关的一线专家介绍了优云在平安城市视频监控运维

企业云化2.0的深度思考与展望

伴随着IT新技术的发展,像虚拟化.云计算和大数据对大家来说已经不再陌生了.在企业里面进行云化实施的时候,各种新技术在优势显现的同时,随之而来的问题也比较多.上了云之后,有时候我们没有感觉到轻松反而更累了.那么问题出现在哪儿?我们的IT是变得简单还是复杂了?我们的思维是否还禁锢在传统的IT模式里面?下面分享下我们在云化过程当中的思考与实践. 一.企业云化演进的阶段分析 云计算从2006年出现到现在已经发展了有10余年的时间,在这期间硬件资源虚拟化及其管理技术获得繁荣发展,推动人们对云的概念和认识不

天律的云端大数据分析挖掘之旅

随着数据爆炸式的增长,我们正被各种数据包围着,最为平常的使用网络.手机.各种电子设备,每天都在产生各种新的数据.大部分的企业和机构都面临着这样一个问题,需要从海量的历史.实时数据中寻找规律,从而为决策者提供科学的依据.但不可否认的是,现代所产生的信息量过于庞大,传统的业务软件已经远远不能满足这样的要求,而构建大规模数据处理中心对于大部分企业来讲都是一笔过于庞大的开支.这就迫切需要一种新颖的.高效的.成本低廉的技术来支撑对数据的挖掘工作,云计算无疑是最佳选择. 信息时代,一寸数据一寸金 IT环境已

R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理

1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selective search + CNN + SVMs Step1:候选框提取(selective search) 训练:给定一张图片,利用seletive search方法从中提取出2000个候选框.由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全部resize到227*