在Azure DevOps Server中实现用户端原地址透传(X-Forward-For)
Contents
- 1. 场景描述
- 2. 解决方案
1. 场景描述
在Azure DevOps Server的典型部署场景中(如下图),一般都会部署多台应用服务器,以此实现应用服务器层面的负载均衡,满足多用户高并发访问的场景。在应用服务器之间实现负载均衡,许多企业都使用了独立的负载设备(例如F5)。

在这种网络结构中,用户的原始IP地址一般无法直接传递给Azure DevOps Server的应用层服务器,从而导致应用服务器的日志中记录的源地址(c-ip)一直是负载均衡设备的地址;原因是,IIS 默认只会记录 TCP 连接的远端地址;当请求经过负载均衡器或反向代理时,IIS 实际上只和负载均衡器建立了 TCP 连接,所以它看到的“客户端 IP”就是负载均衡器的 IP,而不是用户的真实 IP。

为了解决这个问题,需要负载均衡器启用IP地址透传(X-Forwarded-For)的功能;就是当数据经过负载均衡器时,设备在TCP的请求头中加入X-Forwarded-For字段,并将用户的原始IP填写到这个字段中;这样在Azure DevOps Server所在的应用服务器中,就可以读取到X-Forwarded-For的值,从而获取原始用户的IP地址。
2. 解决方案
负载均衡器启用X-Forwarded-For:不同的负载均衡器启用方式不一样,可以根据实际情况做好对应的配置
Azure DevOps Server中修改配置
下面我们来介绍如何在Azure DevOps Server的应用服务器中实现这样的功能。使用管理员身份登录Azure DevOps Server的应用服务器,并打开IIS
在IIS中找到Azure DevOps Server对应的网站,并在功能页签中,双击Loggin按钮
![image image]()
在日志配置界面中,选择字段;在弹出的窗口中选的添加字段
![image image]()
在添加字段的界面中,填写X-Forwarded-For的相关信息,可以和下图保持一致
![image image]()
确认,并点击页面右上角的Aplly按钮
注意,Azure DevOps Server会自动重启![image image]()
再次打开IIS的日志文件,我们可以看到文件中新增了X-Forwarded-For字段
![image image]()
在实际应用场景中,这个X-Forwarded-For字段会记录原始用户的IP地址,为未来排查问题、审计溯源等应用场景提供完整的数据。
https://www.cnblogs.com/danzhang
Azure DevOps MVP 张洪君






