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 ...
随机推荐
- Android logcat输出中文乱码
使用adb的logcat 命令查看系统日志缓冲区的内容,会发现在CMD的界面面,直接输出的中文内容是乱码. 这个问题出现在使用logcat将日志直接打印在当前的DOS窗口的时候会出现:使用logcat ...
- C++强制转换
static_cast,dynamic_cast, const_cast, reinterpret_cast dynamic_cast比static_cast多了安全检测,判断源和目标有无继承被继承关 ...
- TZOJ 5280 搜索引擎(模拟字符串)
描述 谷歌.百度等搜索引擎已经成为了互连网中不可或缺的一部分.在本题中,你的任务也是设计一个搜索论文的搜索引擎,当然,本题的要求比起实际的需求要少了许多. 本题的输入将首先给出一系列的论文,对于每篇论 ...
- 零基础学习hadoop到上手工作线路指导(编程篇)
问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...
- AdmBaseController 判断是否登录
代码 using Service.IService; using System; using System.Collections.Generic; using System.Linq; using ...
- jQuery 操作 html5 data-* 属性
Html 部分: <a class="nav-item" href="javascript: void(0)" data-id="{{$item ...
- Spring Boot集成Quartz注入Spring管理的类
摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在S ...
- 2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)
传送门 这题转移很妙啊. f[l][r][1/0]f[l][r][1/0]f[l][r][1/0]表示对于区间[l,r][l,r][l,r]有/无重复的机会时压缩的最小值. 那么可以从三种情况转移过来 ...
- 2018.09.25 codeforces1053E. Euler tour(并查集+st表+模拟)
传送门 毒瘤细节题. 首先考虑不合法的情况. 先把相同的值配对,这样就构成了一些区间. 那么如果这些区间有相交的话,就不合法了. 如何判断?DZYO安利了一波st表,我觉得很不错. 接着考虑两个相同的 ...
- 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)
传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...