TFS应用层服务器获取F5用户的真实IP地址(高可用性)
当用户数量达到一定级别(例如2千)以上,为保证TFS系统的持续服务,最大程度减少因系统宕机对研发团队的影响,系统管理员一般会考虑应用层和数据库层的高可用性方案。
在应用层的高可用性方案中,目前比较常见的是采用F5 (www.f5.com)设备,将TFS的多个节点服务器纳入统一调配方案中,在多节点之间协调请求资源,实现负载均衡分配;同时,当任一节点服务器出现故障时,F5系统会自动将终端用户的http请求转发给其他应用层服务器。
在F5环境中部署TFS系统时,按照F5系统的默认配置,F5转发给TFS系统的http数据包中的源IP地址为F5服务器的地址,而不是最终用户的真实IP地址,在IIS的日志中,你会看到所有的源IP地址为F5的地址,如下图:

Figure 1 – IIS Logs
这种配置,对于需要排查问题的时候,给系统管理员带来了极大的不便,系统管理员无法跟踪到用户的真实IP地址。
通过查阅F5资料https://devcentral.f5.com/articles/x-forwarded-for-log-filter-for-windows-servers,发现可以通过配置X-Forwarded-For的日志过滤,在http数据包中增加字段信息,记录终端用户的原始(真实)IP信息。
我们这里不记录如何在F5服务器端的配置X-Forwarded-For字段,只记录如何在TFS的应用层服务器上IIS日志中增加X-Forwarded-For字段。
在IIS中增加对应字段,首先要确保的IIS版本在8.5或更新的版本,支持增强的日志Enhanced Logging for IIS 8.5,https://www.iis.net/learn/get-started/whats-new-in-iis-85/enhanced-logging-for-iis85)功能,否则你还需要二外的配置(例如下载F5的ISAPI过滤器,http://devcentral.f5.com/downloads/codeshare/F5XForwardedFor.zip)。
下面已图示的方式介绍IIS中增加F5中传入的额外字段:
1. 已管理员身份打开IIS管理器
2. 在左侧窗口中选择Team Foundation Server站点,右侧窗口中选择日志按钮

3. 在日志页面中,选择“选择字段…”按钮,在弹出的窗口中点击“添加字段”,输入在F5中新增的字段“X-FORWARDED-FOR”,并保存设置。

4. IIS会在系统中新建一个以“_x”结尾的同名日志文件,文件中记录下了F5中传入的用户源IP地址

通过上面的设置,我们在IIS的日志文件中可以获得终端用户的真实IP,这对跟踪数据请求的来源和分析问题原因有非常大的帮助。
【常见问题】
1. 修改IIS配置以后,可能导致浏览器访问出现500错误,此时重启TFS Job Agent服务即可
2. 在TFS2013上可能出现用户权限错位的现象,即A用户登录成了B用户,需要清除服务器缓存,或者升级TFS系统到2015或2017.
--
http://www.cnblogs.com/danzhang/ ALM MVP 张洪君
-
TFS应用层服务器获取F5用户的真实IP地址(高可用性)的更多相关文章
- PHP获取用户的真实IP地址
本文出至:新太潮流网络博客 PHP获取用户的真实IP地址,非代理IP function getClientIP(){ global $ip; if(getenv("HTTP_CLIENT_I ...
- 使用CDN后配置nginx自定义日志获取访问用户的真实IP
问题描述: 新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- Java获取请求客户端的真实IP地址
整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...
- 获得用户的真实IP地址
/** * 获得用户的真实IP地址 * * @access public * @return string */if (!function_exists('get_real_ip')){ functi ...
- PHP获得用户的真实IP地址
<?php /** * 获得用户的真实IP地址 * * @access public * @return string */ function real_ip() { static $reali ...
- 使用nginx反向代理时,如何正确获取到用户的真实ip
在记录日志的的时候,获取用户的信息,比如用户的ip,浏览器等等信息是十分重要的. 但是在使用nginx反向代理的时候,可能经过转发无法获取到用户的真实的ip, 在此情况下需要配置nginx,让其在转发 ...
- 获取本地请求的真实IP地址
1 /** 2 * 自定义访问对象工具类 3 * 4 * 获取对象的IP地址等信息 5 * 6 */ 7 public class CusAccessObjectUtil { 8 9 /** 10 * ...
- java 获取请求客户端的真实IP地址
转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr();方法获取的IP地址是:127.0.0.1或192.16 ...
随机推荐
- joinablequeue模块 生产者消费者模型 Manager模块 进程池 管道
一.生产者消费者 主要是为解耦(借助队列来实现生产者消费者模型) import queue # 不能进行多进程之间的数据传输 (1)from multiprocessing import Queue ...
- Segments(叉积)
Segments http://poj.org/problem?id=3304 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
- js string 字符串
mutil lines string 多行字符串, 由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用...表示,是单撇号, 不是单引号. 这是一个 多行 字符 ...
- dede数据库内容替换,去掉文章内容中的img标签
1.织梦已经给我们准备好了数据库内容替换工具,在采集->批量维护->数据库内容替换 2.织梦的文章内容一般在放在dede_addonarticle表body字段中. (1).选择好数据表和 ...
- DB2事务日志
1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...
- Java数据结构和算法(四)赫夫曼树
Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...
- 获得iframe 高度 ,各种浏览器
function fuFunctiondan(){ var frm=$("#z_div"); var iframeHeight=0; if (navigator.userAgent ...
- 使用Application Center Test (ACT)来做压力测试 【转】
在我们完成了基于SPS2003的开发,实现了我们的具体应用以后,我们是不是就可以直接请用户来使用了呢?如果我这么做,那么有经验的开发人员一定会对此嗤之以鼻:居然连压力测试也不做!真是不想活了…… 呵呵 ...
- Devexpress VCL Build v2014 vol 14.2.6 发布
终于支持XE8 了.需要这么长时间吗? New Major Features in 14.2 What's New in VCL Products 14.2 Feature Highlights To ...
- 2018.09.27 codeforces1045D. Interstellar battle(期望dp)
传送门 一道有意思的期望dp. 题意是给出一棵树,每个点最开始都有一个gg的概率,有m次修改,每次修改会把某个点gg的概率更换掉,让你求出每次修改之后整个树被分成的连通块的数量的期望(gg掉的点不算) ...