如何在Microsoft Azure部署的Java REST Web服务中获取调用者源IP
获取Azure上Java REST服务的真实用户IP
这个问题我在帮客户排查Azure部署的服务时遇到过好几次——因为Azure的服务(比如App Service、Front Door这类)前面都会有反向代理/负载均衡层,直接调用request.getRemoteAddr()拿到的自然是代理节点的IP,不是用户的真实源IP。解决思路是从代理传递的请求头里提取,下面给你几个靠谱的实现方式:
1. 优先提取X-Forwarded-For请求头
这是最标准的方式,Azure的代理会把用户的真实IP放在这个头的最前面,后面跟着代理链上的IP(用逗号分隔)。比如头的值可能是192.168.1.1, 10.0.0.1, 10.0.0.2,第一个就是用户的真实IP。
代码示例(普通Servlet环境)
public String getRealIp(HttpServletRequest request) { String xForwardedFor = request.getHeader("X-Forwarded-For"); if (xForwardedFor != null && !xForwardedFor.isBlank()) { // 取第一个IP,注意去掉前后空格 return xForwardedFor.split(",")[0].trim(); } // 兜底方案(一般只会在绕过代理时触发) return request.getRemoteAddr(); }
Spring Boot环境简化写法
如果你用的是Spring Boot,还可以直接用@RequestHeader注解来获取,再处理:
@GetMapping("/api/your-endpoint") public ResponseEntity<String> yourApi( @RequestHeader(value = "X-Forwarded-For", required = false) String xForwardedFor, HttpServletRequest request) { String realIp = null; if (xForwardedFor != null && !xForwardedFor.isBlank()) { realIp = xForwardedFor.split(",")[0].trim(); } else { realIp = request.getRemoteAddr(); } // 后续业务逻辑 return ResponseEntity.ok("Real IP: " + realIp); }
2. 备用方案:X-Real-IP请求头
某些场景下(比如自定义了代理配置),Azure也可能会设置X-Real-IP头,这个头直接存储真实源IP(没有逗号分隔的代理链)。你可以把它作为X-Forwarded-For的降级方案:
public String getRealIp(HttpServletRequest request) { String realIp = request.getHeader("X-Real-IP"); if (realIp == null || realIp.isBlank()) { realIp = request.getHeader("X-Forwarded-For"); if (realIp != null && !realIp.isBlank()) { realIp = realIp.split(",")[0].trim(); } else { realIp = request.getRemoteAddr(); } } return realIp; }
3. 确保Azure代理头正常传递
虽然Azure默认会自动传递这些头,但如果你的服务搭配了Azure Front Door、CDN或者自定义WAF,建议确认一下配置:
- 对于App Service:无需额外配置,默认会转发
X-Forwarded-For、X-Forwarded-Proto等头; - 对于Front Door/CDN:确保在规则里开启了“Forward client IP”选项,这样真实IP才会被写入请求头。
4. 安全提醒:防止头伪造
如果你的服务有可能被直接访问(绕过Azure代理),一定要做安全校验,避免恶意用户伪造X-Forwarded-For头。最简单的方式是在App Service的“网络”设置里配置IP限制,只允许Azure的官方代理IP段访问你的服务——这样所有外部请求都必须经过Azure代理,请求头的内容就是可信的。
内容的提问来源于stack exchange,提问作者Anuj Sharma
相关产品推荐
相关产品推荐

