后端服务器通过alb获取客户端真实ip_raw
Title: 后端服务器通过ALB获取客户端真实IP_负载均衡(SLB)-阿里云帮助中心
URL Source: https://help.aliyun.com/zh/slb/application-load-balancer/use-cases/preserve-client-ip-addresses
Markdown Content: 后端服务器通过ALB获取客户端真实IP_负载均衡(SLB)-阿里云帮助中心
===============
查看 “
” 全部搜索结果
AI 助理 你好,我是AI助理,可以解答问题、推荐解决方案等
输入文档关键字查找
负载均衡 目录
应用型负载均衡ALB
从这里开始
计算
云服务器
高性能计算
Serverless
操作系统
边缘计算
无影
容器
容器服务
存储
基础存储服务
存储数据服务
数据迁移与工具
混合云存储
网络与CDN
云上网络
跨地域网络
混合云网络
CDN
选型与卓越架构设计
安全
云安全
数据安全
身份安全
业务安全
安全服务
中间件
微服务工具与平台
云消息队列
应用集成
云原生可观测
数据库
瑶池数据库
关系型数据库
NoSQL 数据库
- 云数据库 Tair(兼容 Redis®)
- 云原生多模数据库 Lindorm
- 云数据库 MongoDB 版
- 时间序列数据库 TSDB
- 图数据库
- 云数据库 Memcache 版
- 云数据库Cassandra版(文档停止维护)
- 云数据库HBase版
数据库平台与服务
数据仓库
数据库管理工具
人工智能与机器学习
人工智能平台
模型平台与服务
智能搜索与推荐
视觉智能
自然语言处理
智能语音交互
决策智能
AI应用
行业智能
智能客服
大数据计算
数据计算与分析
- 云原生大数据计算服务 MaxCompute
- 实时数仓 Hologres
- 实时计算 Flink版
- 检索分析服务 Elasticsearch版
- 向量检索服务 Milvus 版
- 图计算服务 GraphCompute
- Cloudera CDP 企业数据云平台
数据湖
数据应用与可视化
数据开发与服务
媒体服务
视频服务
媒体处理与内容生产
媒体开发服务
企业服务与云通信
企业云服务
- 云采销(文档停止维护)
- 能耗宝
- 场景金融链接器
- 云行情
- 营销引擎
- 企业商城 LinkedMall
- 移动研发平台
- 多端低代码开发平台魔笔
- 云原生应用组装平台 BizWorks
- 机器人流程自动化
- 云渲染
- Salesforce on Alibaba Cloud
- 信息查询服务
- 元境云游戏(文档停止维护)
- 云游戏平台(文档停止维护)
企业基础服务
企业办公协同
云通信
域名与网站
域名与备案服务
知识产权服务
终端用户计算
无影
物联网
物联网云服务
- 物联网无线连接服务
- 物联网平台
- 物联网智能视频服务
- IoT设备身份认证(文档停止维护)
- IoT安全运营中心(文档停止维护)
- 物联网络管理平台
- 物联网应用开发
- 物联网应用服务(文档停止维护)
- 物联网应用托管服务(文档停止维护)
设备端服务
行业物联网
- 云投屏(文档停止维护)
- 生活物联网平台(飞燕平台)
- 云价签 (文档停止维护)
- 工业互联网平台(文档停止维护)
- AIoT数字园区引擎
- 零售物联网平台(文档停止维护)
- AIoT能力中心(文档停止维护)
- 数字社区平台 (文档停止维护)
开发工具
API 与工具
云效DevOps
开发与运维
Serverless
计算
应用集成
专有云
迁移与运维管理
运维与监控
- 日志服务
- 应用实时监控服务
- 可观测监控 Prometheus 版
- 可观测可视化 Grafana 版
- 可观测链路 OpenTelemetry 版
- 系统运维管理
- 云监控
- 云网管
- 运维事件中心
- 智能顾问
- 应用诊断分析平台
云管理
备份与迁移
解决方案
支持与服务
更多
首页负载均衡应用型负载均衡ALB实践教程高级特性转发后端服务器通过ALB获取客户端真实IP
后端服务器通过ALB获取客户端真实IP
更新时间:2025-03-26 03:30:55
当使用 ALB 监听转发流量时,您可通过 HTTP 头部的 X-Forwarded-For 字段获取客户端真实 IP 地址。
获取方法介绍
七层负载均衡(HTTP 或 HTTPS 协议)支持在 HTTP 头部的 X-Forwarded-For 字段保留客户端真实 IP 信息,服务器进行相应配置后即可获取到客户端真实 IP 地址。
X-Forwarded-For 字段格式如下:
X-Forwarded-For: <客户端真实IP, 代理服务器1-IP, 代理服务器2-IP, ...>
当使用此方式获取客户端真实 IP 时,获取的第一个地址就是客户端真实 IP。
操作步骤
步骤一:检查监听已开启通过X-Forwarded-For 获取功能
-
在顶部菜单栏,选择实例所属的地域。
-
在实例页面,找到目标实例,单击实例 ID。
-
在实例详情页面,单击监听页签,找到目标监听,单击监听 ID。
-
在监听详情页面,查看到附加 HTTP 头字段包括开启通过 X-Forwarded-For 头字段获取来访者客户端 IP。
说明 ALB 默认开启 X-Forwarded-For 头字段获取客户端真实 IP 功能。
步骤二:配置后端服务器
请根据您所使用的服务器类型,选择对应的操作步骤。
配置Nginx服务器
配置Apache服务器
配置IIS服务器
此处以 CentOS 7.9 操作系统、Nginx 1.20.1 版本配置为例介绍。具体请以您实际使用的环境为准。
- 在服务器执行
nginx -V | grep http_realip_module
命令,检查 Nginx 服务器是否安装了 http_realip_module 模块。Nginx 使用 http_realip_module 模块解析 X-Forwarded-For 记录。
如果返回信息中包括--with-http_realip_module
,表示已安装 http_realip_module 模块,可进行下一步。
已安装 http_realip_module 模块返回信息示例
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
说明
* Nginx 1.0.4 版本(2011 年)开始支持 http_realip_module 模块。如果您使用的 Nginx 版本过老,建议您备份配置数据并升级 Nginx 版本。
* 如果未安装 http_realip_module 模块,需要重新编译安装 Nginx 并安装 http_realip_module 模块。操作较为繁琐,建议您使用类似 yum 的包管理器安装 Nginx。
- 修改 Nginx 服务配置文件并保存,修改点可参考下方说明。执行
nginx -t
命令查看配置文件所在路径,默认通常为/etc/nginx/nginx.conf
,具体请以实际环境为准。
http {
# 确保设置$http_x_forwarded_for,该变量用于记录X-Forwarded-For的值
log_format main '$remote_addr- $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# ...
}
- 执行
sudo nginx -s reload
命令,重新加载 Nginx 配置文件。
此处以 CentOS 7.9 操作系统、Apache 2.4.6 版本配置为例介绍。具体请以您实际使用的环境为准。
- 在服务器执行
httpd -M | grep remoteip_module
命令,检查 Apache 服务器是否安装了 remoteip_module 模块。Apache 使用 remoteip_module 模块解析 X-Forwarded-For 记录。
如果返回信息中包括remoteip_module (shared)
,表示已安装该模块,可进行下一步。
说明
* Apache 2.4.0 版本(2012 年)开始支持 remoteip_module 模块。如果您使用的 Apache 版本过老,建议您备份配置数据并升级 Apache 版本。
* 如果未安装 remoteip_module 模块,需要重新编译安装 Apache 并安装 remoteip_module 模块。操作较为繁琐,建议您使用类似 yum 的包管理器安装 Apache。
- 修改 Apache 服务配置文件并保存,修改点可参考下方说明。默认通常为
/etc/httpd/conf/httpd.conf
,具体请以实际环境为准。
# ...
<IfModule log_config_module>
# 增加%{X-Forwarded-For}i ,用于记录X-Forwarded-For信息
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common
#...
</IfModule>
# ...
- 执行
sudo systemctl restart httpd
命令,重启 Apache 服务。
此处以 Windows Server 2016 操作系统配置为例介绍。具体请以您实际使用的环境为准。
-
下载并解压F5XForwardedFor 文件。
-
根据自己的服务器操作系统版本将
x86\
或x64\
目录下的F5XFFHttpModule.dll
和F5XFFHttpModule.ini
拷贝到某个目录,确保 IIS 进程对该目录有读取权限。 -
在服务器管理器中,打开IIS 管理器。
-
选中服务器,双击模块功能。
- 单击配置本机模块,然后在弹出的对话框中,单击注册。
- 添加下载的.dll 文件。
1. 输入文件名称,选择路径之后,单击**确定**。
2. 此时系统会自动选中新注册的模块,请单击**确定**。
- 回到服务器主页,双击日志模块,配置日志格式,在日志中记录
X-Forwarded-For
字段信息。
1. 单击**选择字段**。
2. 单击左下角**添加字段**,添加如下日志字段并确认。
3. 单击右上角**应用**,完成修改。
- 重启 IIS 服务器,等待配置生效。
步骤三:验证后端服务器已获取客户端真实 IP
请根据您所使用的服务器类型,选择对应的操作步骤。
Nginx服务器
Apache服务器
IIS服务器
当 Nginx 作为后端服务器时,您可以通过检查 Nginx 日志来判断是否成功获取到了客户端的真实 IP 地址。
Nginx 日志文件默认路径为:/var/log/nginx/access.log
每行日志中,$http_x_forwarded_for
变量对应的字段中,第一个 IP 地址即为客户端真实 IP 地址。
当 Apache 作为后端服务器时,您可以通过检查 Apache 日志来判断是否成功获取到了客户端的真实 IP 地址。
Apache 日志文件默认路径为:/var/log/httpd/access_log
每行日志中,%{X-Forwarded-For}i
对应的字段中,第一个 IP 地址即为客户端真实 IP 地址。
当 IIS 作为后端服务器时,您可以通过检查 IIS 日志来判断是否成功获取到了客户端的真实 IP 地址。
IIS 日志文件路径,可在日志模块查看。
每行日志中,X-Forwarded-For
对应的字段中,第一个 IP 地址即为客户端真实 IP 地址。
常见问题
为什么有 100 开头的 IP 在频繁访问 ECS 实例
负载均衡系统除了会通过系统服务器的内网 IP 将来自外部的访问请求转到后端 ECS 实例之外,还会对 ECS 实例进行健康检查和可用性监控,这些访问的来源都是由负载均衡系统发起的。
负载均衡系统的地址段为 100.64.0.0/10(100.64.0.0/10 是阿里云保留地址,其他用户无法分配到该网段内,不会存在安全风险),所以会有很多 100 开头的 IP 地址访问 ECS 实例。
为了确保您对外服务的可用性,请确保您的所有服务器均对上述地址的访问配置了安全组放行规则。
与 WAF/CDN/GA 等配合使用时,如何获取客户端真实 IP
流量在经过负载均衡前,如果经过 WAF、CDN、GA 等转发,也可以通过 X-Forwarded-For 字段获取客户端真实 IP 地址,这些产品默认透传 X-Forwarded-For 字段,无需进行其他配置。
如果您业务安全性要求较高,想避免 X-Forwarded-For 伪造,您可通过在其他产品中指定 header 字段记录客户端真实 IP。假如您采用客户端 > CDN > WAF > 负载均衡 > ECS 架构时,CDN 透传 HTTP 头部的 Ali-Cdn-Real-Ip 字段,在 WAF 中接入时客户端 IP 判定方式选择指定 header 字段为 Ali-Cdn-Real-Ip,后端 Nginx 服务器配置日志变量为$http_Ali_Cdn_Real_Ip,日志中获取的亦为客户端真实 IP。
您也可以通过其他多种手段加固系统安全性,例如:
-
验证和过滤 XFF 头部:在后端服务器中,对 XFF 头部进行验证和过滤,以确保它是合法且可信的。您可以检查 XFF 头部的格式和 IP 地址,拒绝非法或可疑的值。
-
使用防火墙和访问控制列表:在负载均衡器和后端服务器之间,使用防火墙和访问控制列表来限制和过滤针对 XFF 头部的恶意请求。
-
SSL/TLS 加密:使用 SSL/TLS 加密来保护通信,包括 XFF 头部的传输。这样可以减少中间人攻击和数据篡改的风险。
ACK 场景下使用负载均衡时如何获取客户端真实 IP
当您在 ACK 集群中使用负载均衡时,获取方式相同,具体操作有部分差异,具体操作请参考ACK 容器集群 Pod 如何获取客户端真实 IP?
相关文档
不同负载均衡类型获取客户端真实 IP 方式有所不同:
-
当您使用 CLB 七层监听时,可通过 X-Forwarded-For 字段获取客户端真实 IP,可参考后端服务器通过 CLB 七层监听获取客户端真实 IP。
-
当您使用 CLB 四层监听时,可通过直接获取或开启 Proxy Protocol 功能获取客户端真实 IP,可参考后端服务器通过 CLB 四层监听获取客户端真实 IP。
-
当您使用 NLB 时,可通过服务器组客户端地址保持功能或开启 Proxy Protocol 功能获取客户端真实 IP,可参考通过 NLB 获取客户端真实 IP。
上一篇:使用ALB实现灰度发布[下一篇: