当用户数量达到一定级别(例如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地址(高可用性)的更多相关文章

  1. PHP获取用户的真实IP地址

    本文出至:新太潮流网络博客 PHP获取用户的真实IP地址,非代理IP function getClientIP(){ global $ip; if(getenv("HTTP_CLIENT_I ...

  2. 使用CDN后配置nginx自定义日志获取访问用户的真实IP

    问题描述:         新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...

  3. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  4. Java获取请求客户端的真实IP地址

    整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...

  5. 获得用户的真实IP地址

    /** * 获得用户的真实IP地址 * * @access public * @return string */if (!function_exists('get_real_ip')){ functi ...

  6. PHP获得用户的真实IP地址

    <?php /** * 获得用户的真实IP地址 * * @access public * @return string */ function real_ip() { static $reali ...

  7. 使用nginx反向代理时,如何正确获取到用户的真实ip

    在记录日志的的时候,获取用户的信息,比如用户的ip,浏览器等等信息是十分重要的. 但是在使用nginx反向代理的时候,可能经过转发无法获取到用户的真实的ip, 在此情况下需要配置nginx,让其在转发 ...

  8. 获取本地请求的真实IP地址

    1 /** 2 * 自定义访问对象工具类 3 * 4 * 获取对象的IP地址等信息 5 * 6 */ 7 public class CusAccessObjectUtil { 8 9 /** 10 * ...

  9. java 获取请求客户端的真实IP地址

    转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr();方法获取的IP地址是:127.0.0.1或192.16 ...

随机推荐

  1. joinablequeue模块 生产者消费者模型 Manager模块 进程池 管道

    一.生产者消费者 主要是为解耦(借助队列来实现生产者消费者模型) import queue  # 不能进行多进程之间的数据传输 (1)from multiprocessing import Queue ...

  2. Segments(叉积)

    Segments http://poj.org/problem?id=3304 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: ...

  3. js string 字符串

    mutil lines string 多行字符串, 由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用...表示,是单撇号, 不是单引号. 这是一个 多行 字符 ...

  4. dede数据库内容替换,去掉文章内容中的img标签

    1.织梦已经给我们准备好了数据库内容替换工具,在采集->批量维护->数据库内容替换 2.织梦的文章内容一般在放在dede_addonarticle表body字段中. (1).选择好数据表和 ...

  5. DB2事务日志

    1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...

  6. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

  7. 获得iframe 高度 ,各种浏览器

    function fuFunctiondan(){ var frm=$("#z_div"); var iframeHeight=0; if (navigator.userAgent ...

  8. 使用Application Center Test (ACT)来做压力测试 【转】

    在我们完成了基于SPS2003的开发,实现了我们的具体应用以后,我们是不是就可以直接请用户来使用了呢?如果我这么做,那么有经验的开发人员一定会对此嗤之以鼻:居然连压力测试也不做!真是不想活了…… 呵呵 ...

  9. 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 ...

  10. 2018.09.27 codeforces1045D. Interstellar battle(期望dp)

    传送门 一道有意思的期望dp. 题意是给出一棵树,每个点最开始都有一个gg的概率,有m次修改,每次修改会把某个点gg的概率更换掉,让你求出每次修改之后整个树被分成的连通块的数量的期望(gg掉的点不算) ...