获取的是Azure Front Door IP而非客户端IP,如何解决?
获取Azure Front Door后方应用的客户端真实IP
可用的请求头
Azure Front Door会通过两个请求头传递客户端真实IP:
X-Azure-ClientIP:直接存储客户端的真实IP,格式单一无需拆分,是优先选择的头X-Forwarded-For:存储经过的代理IP链,第一个IP即为客户端真实IP,值为逗号分隔的IP列表
你当前获取X-Forwarded-For为空,大概率是因为应用所在的Azure服务(比如App Service)未开启信任代理设置,导致代理传递的头被屏蔽;或者Front Door的转发配置被意外关闭(默认是开启的)。
修复后的代码示例
// 优先读取X-Azure-ClientIP String clientIp = request.getHeader("X-Azure-ClientIP"); // 若X-Azure-ClientIP为空,尝试解析X-Forwarded-For if (clientIp == null || clientIp.isBlank()) { String xForwardedFor = request.getHeader("X-Forwarded-For"); if (xForwardedFor != null && !xForwardedFor.isBlank()) { // 取第一个IP(客户端真实IP) clientIp = xForwardedFor.split(",")[0].trim(); } else { // 最后降级到remoteAddr(返回Front Door的IP) clientIp = request.getRemoteAddr(); } }
必要的配置检查
- Azure App Service信任代理设置:
进入Azure门户 -> 你的App Service -> 设置 -> 配置 -> 常规设置,找到「信任代理」选项并设置为开启。开启后,App Service才会信任Front Door传递的代理头信息。 - Front Door转发配置:
检查Front Door的路由规则,确认「转发客户端IP」选项处于启用状态(默认启用)。
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

