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

Contents

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对应的网站,并在功能页签中,双击Logging按钮

      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 张洪君


相关推荐
乘云数字DATABUFF11 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质9 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务