You need to enable JavaScript to run this app.
导航

后端服务器获取客户端源IP

最近更新时间2023.05.08 16:12:59

首次发布时间2023.05.08 16:02:05

本文为您介绍后端服务器如何获取访问 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应用服务器类型选择适当的的配置步骤。本文为您介绍以下两种Web服务器:

  • Nginx:高性能的 HTTP 和反向代理的轻量级 Web服务器,本文以 Nginx 1.17.0 为例。

  • Apache:性能稳定的 Web网页服务器,本文以 Apache 2.4.6 为例。

配置Nginx服务器

  1. 参考登录Linux实例登录目标后端服务器。

  2. 依次执行以下命令,安装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

  3. 执行以下命令,打开nginx.conf文件。
    vi /path/server/nginx/conf/nginx.conf

  4. 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地址段之间使用逗号分隔。

  5. 按ESC退出编辑模式。

  6. 输入:wq保存并退出文件。

  7. 执行以下命令,启动 Nginx。
    /path/server/nginx/sbin/nginx

  8. 执行以下命令,查看 Nginx 的访问日志,您可以获取真实的客户端 IP。
    cat /path/server/nginx/logs/access.log

配置Apache服务器

  1. 参考登录Linux实例登录目标后端服务器。

  2. 执行以下命令,查看Apache版本。
    httpd -v
    回显如下,表示Apache版本为2.4.6。

    Server version: Apache/2.4.6 (CentOS)
    Server built:   Mar 24 2022 14:57:57
    
  3. 执行以下命令,打开 httpd.conf 文件。
    vi /etc/httpd/conf/httpd.conf

  4. 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地址段之间使用逗号分隔。

  5. 按ESC退出编辑模式。

  6. 输入:wq保存并退出文件。

  7. 执行以下命令,重启 Apache。
    systemctl restart httpd

  8. 执行以下命令,查看 Apache 的访问日志,您可以获取真实的客户端 IP。
    cat /etc/httpd/logs/access_log