计算机视觉中,目前有哪些经典的粒子滤波目标跟踪算法法

nginx获取客户端真实IP地址 - 推酷
nginx获取客户端真实IP地址
假设公司网站架构为 client ----&nginx 负载均衡---&varnish 缓存----&nginx( web)-----&tomcat 请问如何从 nginx(web)这一层的访问日志日志中获取以下信息:请求发起的客户端 IP 以及经过的 nginx 负载均衡和 varnish 缓存的服务器 IP,看以下架构图:
在nginx-web服务器安装nginx的时候需要把 --with-http_realip_module 该模块编译进去,该模块是用来从前端服务器发来的头部信息中,获取到客户端的真实IP地址
nginx负载均衡器上的nginx.conf配置如下(针对本次实验的配置):
upstream varnish {
server 10.10.10.122;
location / {
proxy_set_header
proxy_pass
varnish-缓存服务器上 test.vcl的配置如下:
backend web1 {
.host = &10.10.10.123&;
.port = &80&;
sub vcl_recv {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + server.
sub vcl_fetch {
if(req.request == &GET& && req.url ~ &/&){
set beresp.ttl = 5s;
sub vcl_deliver {
if (obj.hits &0){
set resp.http.X-cache = &HIT&;
set resp.http.X-cache = &MISS&;
return(deliver);
nginx-web上nginx.conf的配置如下:
日志格式 nginx自带的日志格式,并未修改
default_type
application/octet-
log_format
'$remote_addr - $remote_user [$time_local] &$request& '
'$status $body_bytes_sent &$http_referer& '
'&$http_user_agent& &$http_x_forwarded_for&';
location / {
index.html index.
set_real_ip_from 10.10.10.122;
real_ip_header X-Real-IP;
增加这2行配置
set_real_ip_from 10.10.10.122; 告诉nginx从那边获取RealIP的值
real_ip_header X-Real-IP; 存储RealIP值的变量名称
从用户端 10.10.10.46 访问
然后在nginx-web上看日志输出
可以看到第一段就是 客户端的IP地址,而并不是varnish服务器的地址,而最后一段里面,就包含 varnish服务器的地址 10.10.10.122 和 nginx服务器的地址10.10.10.120
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致virtualadc 的BLOG
用户名:virtualadc
文章数:114
评论数:235
访问量:535852
注册日期:
阅读量:5863
阅读量:12276
阅读量:409896
阅读量:1098101
51CTO推荐博文
很多提供公开服务的网站都会遇到单一客户IP大量访问导致性能受到影响的问题,这些访问有可能是攻击流量,也有可能是来自代理服务器或者NAT设备后端若干客户的访问。如何有效地对这些流量进行限制而不影响正常用户使用,不同类别产品在这方面提供不同程度的防护。现以A10负载均衡产品AX为例介绍如何实现客户端IP限制。本文提到所有连接为完整TCP连接或未开启SYN-Cookie功能时的半连接。关于SYN-Flooding的防护,负载均衡设备均有较强防护能力,本文不做讨论。也可以针对服务器和虚拟服务器进行总连接数或连接速率限制,也不在本文讨论范围。
首先,某个客户端过渡使用资源体现在以下几个方面:
并发连接数,同一客户IP打开大量连接不关闭,耗费服务器连接资源
新建连接速率,同一客户IP每秒新建连接数量
并发7层请求数,同一客户IP并发的请求数量,并发连接限制了TCP连接数量,但一个TCP连接中可以传送很多个HTTP请求。
7层请求速率,同样由于一个TCP连接中有多个7层请求,单纯TCP连接限制可能无法有效防护。流行的CC攻击就是利用少数TCP连接发送大量HTTP请求的。
带宽使用,作为负载均衡设备,以连接为基础进行处理是更合理的方式。限制了合理的连接数量和请求数量后,带宽也相应得到限制。
负载均衡设备通常有足够的并发连接数和新建连接处理性能将这些连接转发给服务器,但服务器往往无法承受这些负担,因此客户端IP限制很多时候是为了避免服务器过载。而单纯针对服务器的连接限制保护又会导致所有客户端受影响。基于客户端IP的限制则可以保证未过量使用的用户不受影响,只是攻击流量和过量使用的用户收到限制。
下面介绍其工作原理,涉及部分配置命令,但不做完整配置介绍。
AX可以定义叫做Class List的IP列表,最多可以定义255个Class List,每个Class List可以包含800万主机IP地址(/32掩码)和64K个网络子网。Class List可以以文件形式存在。
Class List的格式如下:
ipaddr /network-mask [glid num | lid num] [age minutes] [; comment-string]
lid为Limiting ID,是在某个策略下定义的限制规则编号;
glid为Global Limiting ID,是全局下定义的限制规则编号;
age可以设定这个条目存在多久后删除,只对主机IP地址适用,可对可疑攻击IP短时间限制。
1.1.1.1 /32 lid 1
2.2.2.0 /24 lid 2 ; LID 2 applies to every single IP of this subnet
0.0.0.0 /0 lid 10 ; LID 10 applied to every undefined single IP
3.3.3.3 /32 glid 3 ; Use global LID 3
lid或glid下定义对应的限制规则,可定义单个IP并发连接数量、每100ms新建连接数量、并发请求数、每100ms请求数量、以及超过限制时的可选动作(转发、reset、锁定、日志)
conn-limit num
conn-rate-limit num per num-of-100ms
request-limit num
request-rate-limit num per num-of-100ms
over-limit-action [forward | reset] [lockout minutes] [log minutes]
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
限制策略模板内会定义所使用的Class List名字和对应的lid规则,例如
AX(config)#slb template policy vp_policy
AX(config-policy)#class-list name vp_list
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
应用限制策略到VIP或者vport或者全局下,下面例子为应用到vport 80下对HTTP请求数量进行限制
AX(config)#slb virtual server vs1
AX(config-slb virtual server)#port 80 http
AX(config-slb virtual server-slb virtua...)#template policy vp_policy
在制定限制规则时,要考虑代理服务器和NAT设备后端若干客户使用同一IP的问题,采用的限制值由较大值逐渐下调。或者先采取只log不限制的方式获得IP地址,分析后再逐一制定具体限制策略。
了这篇文章
类别:┆阅读(0)┆评论(0)
13:51:34 15:41:482850人阅读
nginx(7)
声明:本文参考/nginx/nginx-get-user-real-ip/并做了一些补充讲解,希望会更加清晰明了~
随着的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到&&,如果是后端真实服务器是nginx,那么继续往下看。
实例环境:
用户IP 120.22.11.11
CDN前端 61.22.22.22
CDN中转 121.207.33.33
公司NGINX前端代理 192.168.50.121(外网121.207.231.22)
1、使用CDN自定义IP头来获取
假如说你的CDN厂商使用nginx,那么在nginx上将$remote_addr赋值给你指定的头,方法如下:
proxy_set_header
remote-user-ip $remote_
//如上,后端将会收到remote_user_ip的http头,有些人可能会挑错了,说我设置的头不是remote-user-ip吗,怎么写成了remote_user_ip,是不是作者写错了.请参考文章:&&
后端代码getRemoteUserIP.php
= getenv(&HTTP_REMOTE_USER_IP&);
&&&&echo&$&&&
访问getRemoteUserIP.php,结果如下:
120.22.11.11
//取到了真实的用户IP
注:这里$remote_addr是nginx的变量,一般情况是,是报文发送方的IP地址,如果发送方为proxy,那么这里就是proxy的ip,而非用户的真实ip.
注意:这里面会有一个问题,就是所谓的XFF欺骗,当用户直接访问后端的时候,并且他伪造了HTTP报头REMOTE_USER_IP,那么后端获取到的,将是一个虚假的用户IP,这个时候可能会产生一些安全问题。如果可以,建议的做法是:后端服务不允许对外部用户访问,最前端的代理,proxy_set_header
xxxxx $remote_这样就能解决欺骗,因为$remote_addr获取的是用户IP数据包中的IP,而非伪造的HTTP报文首部。
2、通过HTTP_X_FORWARDED_FOR获取IP地址
一般情况下CDN服务器都会传送HTTP_X_FORWARDED_FOR头。而且会用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
这里,$proxy_add_x_forwarded_for是一个神奇的变量,假如接收到的报文已经含有X-FORWARDED-FOR首部,那么nginx将在后面添加上$remote_addr(也就是发送者的ip地址在最后),因此后端的真实服务器获取HTTP_X_FORWARDED_FOR头,截取字符串第一个不为unkown的IP作为用户真实IP地址,
120.22.11.11, &61.22.22.22, &121.207.33.33,192. &168.50.121(用户IP,CDN前端IP,CDN中转,公司NGINX代理)
getFor.php
= getenv(&HTTP_X_FORWARDED_FOR&);
&&&&echo&$
访问getFor.php结果如下:
120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121
如果你是php程序员,你获取第一个不为unknow的ip地址,这边就是120.22.11.11.
同理,为防止XFF欺骗,除了第一层代理,后面的多禁止普通用户访问,第一层代理,用$remote_addr来设置pass&X-Forwarded-For即可。
3.使用nginx自带模块realip获取用户IP地址
有些时候,中间或者后端的代理,都要能够被普通用户访问,也或者在nginx日志中,想让$remote_adrr配置的格式,能显示外界用户的ip,这个时候,就要使用realip模块了。
安装nginx之时加上realip模块,我的参数如下:
./configure
--prefix=/usr/local/nginx-1.4.1
--with-http_realip_module
真实服务器nginx配置
&&&&listen&&&&&&
&&&&server_name&
&&&&access_log&
/data/logs/nginx/.access.log&
index.php index.html index.
/data/site/;
&&&&location
&&&&&&&&&&&&root
/data/site/;
&&&&location
= /getRealip.php
&&&&&&&&&&&&set_real_ip_from&
192.168.50.0/24;
&&&&&&&&&&&&set_real_ip_from&
61.22.22.22;
&&&&&&&&&&&&set_real_ip_from&
121.207.33.33;
&&&&&&&&&&&&set_real_ip_from
127.0.0.1;
&&&&&&&&&&&&real_ip_header&&&
X-Forwarded-F
&&&&&&&&&&&&real_ip_recursive
&&&&&&&&&&&&fastcgi_pass&
unix:/var/run/phpfpm.
&&&&&&&&&&&&fastcgi_index
&&&&&&&&&&&&include
getRealip.php内容
=& $_SERVER['REMOTE_ADDR'];
&&&&echo&$&&&
访问/getRealip.php,返回:
120.22.11.11
如果注释 real_ip_recursive on或者 real_ip_recursive off
访问/getRealip.php,返回:
121.207.33.33
很不幸,获取到了中继的IP,real_ip_recursive的效果看明白了吧.
set_real_ip_from:真实服务器上一级代理的IP地址或者IP段,可以写多行
real_ip_header:从哪个header头检索出要的IP地址
real_ip_recursive:递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IP。例如我这边的例子,真实服务器获取到的IP地址串如下:
120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121
在real_ip_recursive on的情况下
61.22.22.22,121.207.33.33,192.168.50.121都出现在set_real_ip_from中,仅仅120.22.11.11没出现,那么他就被认为是用户的ip地址,并且赋值到remote_addr变量
在real_ip_recursive off或者不设置的情况下
192.168.50.121出现在set_real_ip_from中,排除掉,接下来的ip地址便认为是用户的ip地址
如果仅仅如下配置:
set_real_ip_from&&
192.168.50.0/24;
set_real_ip_from
127.0.0.1;
real_ip_header&&&
X-Forwarded-F
real_ip_recursive
访问结果如下:
121.207.33.33
这里可能有朋友会不理解,我来补充解释一下http_realip_module这个模块好了,它包括三个指令:
1、set_real_ip_from 是指接受从哪个信任前代理处获得真实用户ip
2、real_ip_header 是指从接收到报文的哪个http首部去获取前代理传送的用户ip
3、real_ip_recursive 是否递归地排除直至得到用户ip(默认为off)&
首先,real_ip_header
指定一个http首部名称,默认是X-Real-Ip,假设用默认值的话,nginx在接收到报文后,会查看http首部X-Real-Ip。
(1)如果有1个IP,它会去核对,发送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它会去认为这个X-Real-Ip中的IP值是前代理告诉自己的,用户的真实IP值,于是,它会将该值赋值给自身的$remote_addr变量;如果不被信任,那么将不作处理,那么$remote_addr还是发送方的ip地址。
(2)如果X-Real-Ip有多个IP值,比如前一方代理是这么设置的:proxy_set_header
X-Real-Ip $proxy_add_x_forwarded_
得到的是一串IP,那么此时real_ip_recursive
的值就至关重要了。nginx将会从ip列表的右到左,去比较set_real_ip_from 的信任列表中的ip。如果real_ip_recursive为off,那么,当最右边一个IP,发现是信任IP,即认为下一个IP(右边第二个)就是用户的真正IP;如果real_ip_recursive为on,那么将从右到左依次比较,知道找到一个不是信任IP为止。然后同样把IP值复制给$remote_addr。(可以参考上面的例子,帮助理解这个过程)
因此,明白了整个过程后,我们知道,用realip模块是非常好用的,能满足各种获取用户IP的需求,而且不会受到XFF欺骗!
那么问题来了,后端除了想获取用户ip,也想获取代理ip,怎么办呢?那么此时$proxy_add_x_forwarded_for派上用场。只需要在每一层代理IP,都保持一个良好的习惯:proxy_set_header
X-Forwarded-For $proxy_add_x_forwarded_然后后端得到的X-Forwarded-For首部,依次就是用户IP到各层代理的IP,至于最靠近自己的代理ip,各种web开发语言都有获取发送方真实IP的接口了,然后你知道该怎么做了吧?!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:140589次
积分:2016
积分:2016
排名:第16920名
原创:32篇
转载:189篇
(1)(2)(3)(6)(9)(7)(7)(2)(4)(3)(5)(4)(1)(6)(8)(6)(9)(6)(6)(9)(3)(4)(5)(5)(5)(13)(21)(1)(3)(6)(11)(5)(5)(17)(16)

我要回帖

更多关于 目标跟踪经典算法 的文章

 

随机推荐