log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
确保Nginx信任ALB的IP段,防止IP伪造攻击,可以通过设置proxy_set_header指令来传递真实IP给上游应用。
Java/Spring Boot应用处理
对于基于Spring Boot的微服务,通常依赖Spring MVC的RemoteIpValve或自定义过滤器,在application.yml中配置server.tomcat.remote_ip_header为x-forwarded-for,并指定proxy_ips为ALB的网段。
常见误区与对比分析
很多开发者在配置过程中容易混淆ALB与SLB(传统型负载均衡)的配置差异,或者误以为开启功能后无需后端配合。
ALB与SLB在IP透传上的区别
虽然两者都支持获取真实IP,但底层实现和配置入口不同。
| 特性 | ALB (应用型负载均衡) | SLB (传统型负载均衡) |
|---|---|---|
| 工作层级 | 七层 (HTTP/HTTPS) | 四层 (TCP/UDP) 或 七层 |
| IP透传方式 | 主要通过HTTP Header (X-Forwarded-For) | TCP模式下需配置X-Forwarded-For,HTTP模式同ALB |
| 配置复杂度 | 控制台一键开启,自动化程度高 | 部分场景需手动配置后端服务器IP白名单 |
| 适用场景 | 微服务、容器化部署、Web应用 | 传统虚拟机、数据库代理、非HTTP协议 |
HTTPS场景下的特殊处理
在HTTPS加密传输中,ALB负责SSL卸载,解密后的请求再转发给后端,ALB必须在解密后重新构建HTTP请求头,才能正确注入X-Forwarded-For,如果后端服务器也配置了SSL证书,形成端到端加密,ALB将无法读取请求内容,也就无法注入真实IP头,业内共识认为,在需要获取真实IP的场景下,ALB端必须执行SSL卸载,后端服务器使用HTTP协议接收流量。
安全加固与防伪造策略
开启真实IP透传后,最大的风险在于IP伪造,攻击者可以轻易在HTTP请求中手动添加X-Forwarded-For头,模拟任意IP。
信任链配置
后端服务必须只信任来自ALB的IP地址,对于Nginx,可以使用ngx_http_realip_module模块。
配置示例
set_real_ip_from ALB内网网段;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
这段配置告诉Nginx,只有来自指定网段的请求,其X-Forwarded-For头才是可信的,如果请求来自其他IP,Nginx将忽略该头部,直接使用TCP连接的源IP。
阿里云ALB IP段更新
阿里云的ALB节点IP段可能会随时间调整,建议定期查阅阿里云官方文档,获取最新的ALB公网和内网IP段列表,并同步更新后端防火墙或应用配置,据统计,多数安全漏洞源于未及时更新信任列表,导致旧IP段失效或新IP段未纳入信任范围。
实战场景:日志分析与风控集成
日志格式标准化
在分布式系统中,日志的统一格式至关重要,建议在后端应用中,将X-Forwarded-For解析后的第一个IP作为用户真实IP,并统一写入日志系统。
Python Flask示例
from flask import request
def get_real_ip():
获取X-Forwarded-For头
forwarded_for = request.headers.get('X-Forwarded-For')
if forwarded_for:
# 取第一个IP,即客户端原始IP
return forwarded_for.split(',')[0].strip()
# 如果没有,则使用远程地址
return request.remote_addr</code></pre>
风控系统对接
风控系统依赖准确的IP地址来判断用户地理位置和行为异常,如果IP错误,可能导致误封正常用户或放过恶意攻击者,在集成风控SDK时,务必传入解析后的真实IP,而非ALB节点IP。
常见问题解答
ALB获取真实IP失败怎么办?
首先检查ALB监听器是否已开启“获取真实IP”功能,确认后端服务器是否正确解析了X-Forwarded-For头,而非直接读取REMOTE_ADDR,检查HTTPS配置,确保ALB进行了SSL卸载,且后端使用HTTP接收请求,如果使用了CDN,还需在CDN层配置回源头传递,确保ALB能接收到包含真实IP的头部。
ALB获取真实IP与CDN叠加时如何处理?
当架构中包含CDN时,请求链路为:用户 -> CDN -> ALB -> 后端,X-Forwarded-For头中会包含CDN节点IP,后端服务器应信任CDN和ALB的IP段,并从X-Forwarded-For头的最左侧(或根据配置指定的位置)提取用户真实IP,建议在CDN控制台开启“回源跟随CDN IP”或类似选项,并在ALB和后端分别配置信任链,确保IP透传的完整性。
阿里云ALB获取真实IP收费标准如何?
获取真实IP功能本身不产生额外费用,它包含在ALB实例的按量付费或包年包月费用中,由于ALB基于七层处理,相比四层负载均衡,其计算资源消耗略高,如果因IP透传导致日志量激增,存储费用可能相应增加,建议根据业务流量规模选择合适的ALB规格,并优化日志保留策略以控制成本。
正确配置ALB获取真实IP,不仅是技术实现的细节,更是保障业务安全与数据准确性的基石,通过遵循上述配置路径与安全策略,开发者可以构建出更加健壮和可信的云原生应用架构。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/321965.html









