`

use x-forwarded-for

    博客分类:
  • web
 
阅读更多

X-Forwarded-For (XFF )是用来识别通过HTTP 代理负载均衡 方式连接到Web服务器 的客户端最原始的IP地址 的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETFForwarded-For HTTP头字段标准化草案 中正式提出。

当今多数缓存服务器的使用者为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网 。有些情况下, 这些代理服务器是透明代理, 用户甚至不知道自己正在使用代理上网。

如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址(而非连接发起的原始IP地址), 这样的代理服务器实际上充当了匿名服务提供者的角色, 如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此, XFF的有效使用应该保证代理服务器是可信的, 比如可以通过建立可信服务器白名单的方式。

 

格式

这一HTTP头一般格式如下:

X-Forwarded-For: client1, proxy1, proxy2

其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址 添 加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被 发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加 到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请 求会被继续转发。

鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。

 

apache日志中 X-Forwarded-For 参数的设定

apache 日志中可以设定 X-Forwarded-For 参数来获取客户端真实的ip地址

对于使用了反向代理的客户端,跟踪真实的ip地址
X-Forwarded-For header is supported by most proxy servers, including Squid,[1] Apache mod_proxy,[2] Pound,[3] Varnish cache,[4] IronPort Web Security Appliance,[5] Radware AppXcel, F5 Big-IP, [6] Blue Coat ProxySG, Cisco Cache Engine, Phion Airlock, Finjan's Vital Security, NetApp NetCache, jetNEXUS, Crescendo Networks' Maestro, and Microsoft ISA Server 2004/2006 with Winfrasoft X-Forwarded-For for ISA Server.[7]
X-Forwarded-For header logging is supported by many web servers including Apache and Microsoft IIS 6.0 & 7.0 with the addition of Winfrasoft X-Forwarded-For for IIS.[7]

##########################################
this is a apache's seting for X-Forwarded-For (f5):

%{X-Forwarded-For}i

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

SetEnvIf X-Forwarder-For "^.*\..*\..*\..*" is-forwarder

CustomLog logs/access_log combined env=!is-forwarder
CustomLog logs/access_log f5_forwarder env=is-forwarder

 

http://zh.wikipedia.org/wiki/X-Forwarded-For

 

分享到:
评论

相关推荐

    gin-gonic-realip:Gin的Real IP中间件将http.Request的RemoteAddr设置为解析X-Forwarded-For标头或X-Real-IP标头的结果

    的Real IP中间件,将http.Request的RemoteAddr设置为解析X-Forwarded-For标头或X-Real-IP标头的结果。 用法 package main import ( "github.com/gin-gonic/gin" "github.com/thanhhh/gin-gonic-realip" ) func ...

    express-extras:ExpressJS 附加功能

    当使用代理(如 nginx)时,此中间件模块尝试将req.socket.remoteAddress和headers['x-forwarded-for'] req.ip为req.ip var extras = require('express-extras'); app.configure(function() { app.use(extras....

    获取用户真实IP地址

    const realIp = req.headers['x-real-ip'] || req.headers['x-forwarded-for']; if (Array.isArray(realIp)) { realIp = realIp.split(',')[0]; } console.log('Real IP:', realIp); next(); }); app.listen...

    Laravel开发-laravel-cloudflare-real-ip

    此外,考虑到不同的CDN可能会有不同的头字段名,你还可以检查其他可能的头,如`X-Forwarded-For`,这是一个常见的代理头,很多CDN和代理服务都会设置它。如果`CF-Connecting-IP`不存在,可以尝试从`X-Forwarded-For`...

    Suse Linux 同机部署两个Ngnix负载均衡服务

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://nginx-cis; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X...

    ipaddr学习

    例如,我们可以用`ipaddr.js`检查`X-Forwarded-For`头中的第一个IP地址,确保它不是一个私有或受限的IP地址,从而防止潜在的安全攻击。 在实际应用中,以下是一个示例代码片段,展示了如何结合`ipaddr.js`和`trust ...

    客户与服务应用之取回客户IP

    String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length...

    PHP代理脚本php-proxy.zip

     $event['request']->headers->set('X-Forwarded-For', 'php-proxy'); }); $proxy->getEventDispatcher()->addListener('request.sent', function($event){  if($event['response']->getStatusCode() != 200){...

    remote_ip:一个插件,用于基于转发头重写Plug.Conn的remote_ip

    可以识别通用逗号分隔的标头,例如X-Forwarded-For , X-Real-Ip和X-Client-Ip ,以及 Forwarded标头。 您可以指定任意数量的转发头来识别甚至配置自己的解析器。 IP的处理是从后到先的,以防止IP欺骗。 默认情况下...

    proxy-server-preserve-client-ip

    在这个配置中,`onProxyReq`回调函数用于在请求发送到目标服务器之前,添加或更新`X-Forwarded-For`头。 3. **启动服务器**:然后,你可以使用Express或其他HTTP服务器库结合这个代理中间件启动你的服务: ```...

    nginx_https+tomcat_http配置.docx

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` - **重启Nginx服务** - 保存所有更改后,重启Nginx服务。 #### 二、Linux环境下Nginx...

    tomcat8 + nginx + memcached + cas 实现负载均衡的配置包

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; index index....

    SFC模拟器00000

    Snes9x is freeware for PERSONAL USE only. Commercial users should seek permission of the copyright holders first. Commercial use includes charging money for Snes9x or software derived from Snes9x. ...

    Nginx安装配置1

    - `proxy_set_header`:设置代理服务器头信息,如Host、X-Real-IP和X-Forwarded-For,用于识别真实客户端。 - `proxy_cache_path`:定义缓存路径和参数,例如大小、级别等。 - `proxy_ignore_headers`:忽略特定...

    linux+nginx+tomcat+redis安装配置手册.docx

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` - 测试配置文件的正确性: ```bash sudo nginx -t ``` - 如果测试没有问题,重新...

    HAProxy配置文件详解和ACL功能.docx

    `option forwardfor`添加X-Forwarded-For头,记录客户端真实IP。错误页面相关设置允许自定义返回给客户端的错误页面。`cookie`和`redispatch`涉及会话持久性和会话重调度。`reqadd`和`rspadd`允许在请求或响应中添加...

    nginx+lvs+keepalived安装文档

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` #### 四、LVS 安装与配置 1. **安装 LVS**: - 使用包管理器安装 `ipvsadm`,例如 `yum install ipvsadm`。 - 编写 shell 脚本 `lvs...

    nginx配置优化+负载均衡+动静分离详解

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ``` 通过以上配置,我们可以看到Nginx不仅提供了丰富的配置选项来优化其自身性能,还能够有效地实现负载均衡和动静分离等功能,从而显著提升...

    haproxy负载均衡配置.docx

    4. **option forwardfor**:此选项会将客户端的真实IP地址添加到HTTP请求头的`X-Forwarded-For`字段中,方便后端服务器识别原始请求来源。 5. **check**:健康检查,haproxy会定期向后端服务器发送探测请求,确保...

    request-header-api

    例如,请求的IP地址可以通过`req.ip`获取,但通常这会包含代理信息,所以更推荐使用`req.headers['x-forwarded-for']`来获取真实IP。用户代理和语言信息分别通过`req.headers['user-agent']`和`req.headers['accept-...

Global site tag (gtag.js) - Google Analytics