通过应用型BLB实例获取客户端信息
更新时间:2024-08-29
场景介绍
在负载均衡中分析客户端信息是为了更智能地分配请求,提高系统的性能、可靠性和用户体验,能够实现:帮助负载均衡器选择合适的后端服务器来处理请求。例如,可以基于客户端IP地址、用户会话信息或地理位置等因素进行路由决策,将请求分配给最适合处理的服务器;增强安全性。例如,可以根据客户端的地理位置或IP地址进行访问控制,防范恶意行为或DDoS攻击;等能力。本文将介绍如何使用BLB自带的功能分析用户信息。
基本原理
由于转发时会改写客户端源IP信息,后端收到请求的实际源IP为BLB实例VIP,应用型负载均衡的7层监听器HTTP监听和HTTPS监听支持在转发时在header:X-Forwarded-For写入客户端真实IP,在header:X-Forwarded-Proto方式写入监听协议。这样,后端在接收到请求时,可以根据这两个头信息记录和分析来访客户端的特征。
本文将基于CentOS BCC上配置Nginx服务器为例,演示如何获取客户端信息。
准备工作
您需要先创建好应用型BLB实例,配置好7层监听器(HTTP或HTTPS),配置好对应的服务器组,详见:应用型BLB指导文档
配置服务器
- 在与BLB实例同VPC环境下,购买BCC实例,此处选择CentOS 7.6镜像,详见:快速配置Linux云服务器
- 将BCC实例添加为BLB实例的后端服务器,详见:应用型BLB指导文档
- 将此服务器所在服务器组与监听器关联,并开启
- 登录BCC实例,执行以下命令行配置Nginx和http_realip_module
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar zxvf nginx-1.17.0.tar.gz
cd nginx-1.17.0
./configure --prefix=/path/server/nginx --with-http\_stub\_status\_module --without-http-cache --with-http\_ssl\_module --with-http\_realip\_module
make
make install
说明:下载Nginx相关包需要公网环境
配置服务端获取客户端信息
执行以下命令,打开nginx.conf文件。
vi /path/server/nginx/conf/nginx.conf
-
按
i
进入编辑模式,在以下 server 配置信息后添加新的配置字段和信息。server { listen 80; server_name localhost;
1. 获取源IP
在Server字块中需要添加的配置字段和信息:
set_real_ip_from 100.64.0.0/10; real_ip_header X-Forwarded-For;
在location / 字块中需要添加的配置字段和信息:
location / { # 获取真实IP set $real_ip $remote_addr; # 如果启用了realip模块,可以使用如下变量 # set $real_ip $realip_remote_addr; # 在这里可以使用$real_ip进行进一步的处理 # 例如,将其传递给后端服务器或记录日志等 }
-
说明
- 您可以将代理服务器的网段添加到 set_real_ip_from <IP_cidr>,以便获取代理服务器的IP地址。例如,添加 应用型BLB 的IP地址段(100.64.0.0/10是 应用型BLB的保留地址,其他用户无法分配到该网段内,不会存在安全风险)。
- 如为应用型IPv6BLB,此处网段为:2403:ed40:f200::/40
- listen 80 如果监听端口非80,请替换为后端服务器的实际端口。
- 多个IP地址段之间使用逗号分隔。
2. 获取协议信息
在 location / 字块中需要添加的配置字段和信息:
# 获取X-Forwarded-Proto的值
set $real_proto $http_x_forwarded_proto;
# 如果X-Forwarded-Proto未设置,则使用实际协议
if ($real_proto = "") {
set $real_proto $scheme;
}
# 现在$real_proto包含X-Forwarded-Proto或实际协议
# 在这里可以使用$real_proto进行进一步的处理
# 例如,判断是否为HTTPS协议等
- 按ESC退出编辑模式。
- 输入:wq保存并退出文件。
- 执行以下命令,启动 Nginx。
/path/server/nginx/sbin/nginx
- 执行以下命令,查看 Nginx 的访问日志,您可以获取真实的客户端 IP和协议。
cat /path/server/nginx/logs/access.log