本文为您介绍后端服务器如何获取访问 ALB 的客户端源 IP 地址。
ALB 的监听器(HTTP监听器、HTTPS监听器)通过配置后端服务器,可以使用 X-Forwarded-For 的方式获取客户端的真实 IP 地址。
真实的客户端 IP 会被 ALB 放在 HTTP 头部的 X-Forwarded-For 字段,字段中的第一个地址就是客户端真实 IP 。具体格式如下:X-Forwarded-For: 来访者真实IP, 代理服务器1-IP, 代理服务器2-IP, ...
本文以 CentOS 7.6 为例,您也可以按需替换为 CentOS 7.9、veLinux 1.0(CentOS兼容版)等CentOS 7系镜像。
请您根据后端服务器配置的 Web应用服务器类型选择适当的的配置步骤。本文为您介绍以下两种Web服务器:
Nginx:高性能的 HTTP 和反向代理的轻量级 Web服务器,本文以 Nginx 1.17.0 为例。
Apache:性能稳定的 Web网页服务器,本文以 Apache 2.4.6 为例。
参考登录Linux实例登录目标后端服务器。
依次执行以下命令,安装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.conf文件。vi /path/server/nginx/conf/nginx.conf
按i
进入编辑模式,在以下 server 配置信息后添加新的配置字段和信息。
server { listen 80; server_name localhost;
需要添加的配置字段和信息:
set_real_ip_from 100.64.0.0/10; real_ip_header X-Forwarded-For;
说明
您可以将代理服务器的网段添加到 set_real_ip_from <IP_cidr>,以便获取代理服务器的IP地址。例如,添加 ALB 的IP地址段(100.64.0.0/10是 ALB的保留地址,其他用户无法分配到该网段内,不会存在安全风险)。
多个IP地址段之间使用逗号分隔。
按ESC退出编辑模式。
输入:wq保存并退出文件。
执行以下命令,启动 Nginx。/path/server/nginx/sbin/nginx
执行以下命令,查看 Nginx 的访问日志,您可以获取真实的客户端 IP。cat /path/server/nginx/logs/access.log
参考登录Linux实例登录目标后端服务器。
执行以下命令,查看Apache版本。httpd -v
回显如下,表示Apache版本为2.4.6。
Server version: Apache/2.4.6 (CentOS) Server built: Mar 24 2022 14:57:57
执行以下命令,打开 httpd.conf 文件。vi /etc/httpd/conf/httpd.conf
按i
进入编辑模式,修改日志格式并在文件末尾添加相关配置信息。
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined //在原内容中添加配置%{X-Forwarded-For}i CustomLog "logs/access_log" common //去掉此行配置前的注释符#:
LoadModule remoteip_module modules/mod_remoteip.so RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 100.64.0.0/10
说明
您可以将代理服务器的网段添加到 RemoteIPInternalProxy <IP_cidr>,以便获取代理服务器的IP地址。例如,添加 ALB 的 IP 地址段(100.64.0.0/10是 ALB 的保留地址,其他用户无法分配到该网段内,不会存在安全风险)。
多个IP地址段之间使用逗号分隔。
按ESC退出编辑模式。
输入:wq保存并退出文件。
执行以下命令,重启 Apache。systemctl restart httpd
执行以下命令,查看 Apache 的访问日志,您可以获取真实的客户端 IP。cat /etc/httpd/logs/access_log