当前位置: 首页 > news >正文

在Azure DevOps Server中实现用户端原地址透传(X-Forward-For)

在Azure DevOps Server中实现用户端原地址透传(X-Forward-For)


Contents

  • 1. 场景描述
  • 2. 解决方案

1. 场景描述

在Azure DevOps Server的典型部署场景中(如下图),一般都会部署多台应用服务器,以此实现应用服务器层面的负载均衡,满足多用户高并发访问的场景。在应用服务器之间实现负载均衡,许多企业都使用了独立的负载设备(例如F5)。


image

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

image

为了解决这个问题,需要负载均衡器启用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

  • 在添加字段的界面中,填写X-Forwarded-For的相关信息,可以和下图保持一致
    image

  • 确认,并点击页面右上角的Aplly按钮
    注意,Azure DevOps Server会自动重启
    image

  • 再次打开IIS的日志文件,我们可以看到文件中新增了X-Forwarded-For字段
    image
    在实际应用场景中,这个X-Forwarded-For字段会记录原始用户的IP地址,为未来排查问题、审计溯源等应用场景提供完整的数据。

https://www.cnblogs.com/danzhang
Azure DevOps MVP 张洪君

image