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

七层监听器获取客户端源IP

最近更新时间2023.12.07 16:37:22

首次发布时间2021.07.09 13:29:27

本节将介绍七层监听器如何获取访问负载均衡服务的客户端源IP地址。

场景介绍

负载均衡的七层监听器(HTTP/HTTPS协议)通过对后端服务器进行配置,可以使用X-Forwarded-For方式获取来访者的真实IP地址。
真实的来访者IP会被负载均衡放在HTTP头部的X-Forwarded-For字段,字段中的第一个地址就是来访者真实IP。

前提条件

后端服务器已安装相关软件,如Nginx、Apache等。

  • Nginx:高性能的HTTP和反向代理的轻量级Web服务器,本文以Nginx 1.22.0为例。详细安装步骤可参见安装Nginx的前3步。
  • Apache:性能稳定的Web网页服务器,本文以Apache 2.4.6为例。详细安装步骤可参见安装Apache

配置步骤

配置Nginx服务器

  1. 参考登录Linux实例登录目标后端服务器。
  2. 执行以下命令,查看Nginx配置文件nginx.conf的路径。
    find / -name nginx.conf
    
    回显如下图所示,表示Nginx配置文件路径为“/etc/nginx/nginx.conf”。
    alt
  3. 依次执行以下命令,在配置文件目录下备份Nginx配置文件,然后打开原Nginx配置文件。
    cd /etc/nginx
    cp nginx.conf nginx.conf.bak
    vi 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地址。例如,添加负载均衡的IP地址段(100.64.0.0/10是负载均衡服务的保留地址,其他用户无法分配到该网段内,不会存在安全风险)。多个IP地址段之间使用逗号分隔。

  5. ESC退出编辑模式,输入:wq保存并退出文件。
  6. 执行以下命令,重启Nginx。
    systemctl restart nginx.service
    
  7. 执行以下命令,查看Nginx访问日志文件access.log的路径。
    find / -name access.log
    
    回显如下图所示,表示Nginx访问日志文件的路径为“/var/log/nginx/access.log”。
    alt
  8. 执行以下命令,查看Nginx的访问日志,您可以获取真实的来访者IP。
    cat /var/log/nginx/access.log

配置Apache服务器

  1. 参考登录Linux实例登录目标后端服务器。
  2. 执行以下命令,查看Apache配置文件路径。
    httpd -V
    
    回显如下图所示,表示Apache配置文件路径为“/etc/httpd/conf/httpd.conf”。
    alt
  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地址。例如,添加负载均衡的IP地址段(100.64.0.0/10是负载均衡服务的保留地址,其他用户无法分配到该网段内,不会存在安全风险)。多个IP地址段之间使用逗号分隔。

  5. ESC退出编辑模式,输入:wq保存并退出文件。
  6. 执行以下命令,重启Apache。
    systemctl restart httpd
    
  7. 执行以下命令,查看Apache的访问日志,您可以获取真实的来访者IP。
    cat /etc/httpd/logs/access_log