您可以通过设置传统型负载均衡的七层监听服务保留客户端的真实源IP地址。

背景信息

七层负载均衡(HTTP或HTTPS协议)服务需要对应用服务器进行配置,然后使用X-Forwarded-For的方式获取客户端的真实源IP地址。真实的客户端源IP存放在HTTP头部的X-Forwarded-For字段,格式如下:
X-Forwarded-For: <用户真实IP, 代理服务器1-IP, 代理服务器2-IP,...>

当使用此方式获取客户端真实IP时,获取的第一个地址就是客户端真实IP。

说明 负载均衡的HTTPS监听是在负载均衡服务上的加密控制,后端服务器使用的是HTTP协议,因此,在Web应用服务器上配置HTTPS和HTTP监听没有区别。

配置IIS7或IIS8服务器

  1. 下载并解压F5XForwardedFor文件
  2. 根据自己的服务器操作系统版本将x86\x64\目录下的F5XFFHttpModule.dllF5XFFHttpModule.ini拷贝到某个目录,例如C:\F5XForwardedFor\。确保IIS进程对该目录有读取权限。
  3. 打开IIS管理器,双击模块功能。
  4. 单击配置本机模块,然后在弹出的对话框中,单击注册
  5. 添加下载的.dll文件。
    1. 输入文件名称,选择路径之后,单击确定
    2. 此时系统会自动选中新注册的模块,请单击确定注册模块
  6. 为添加的两个文件授权允许运行ISAPI和CGI扩展程序。
    说明 确保您已经安装了ISAPI和CGI应用程序。
  7. 重启IIS服务器,等待配置生效。

配置Apache服务器

本文以在alidata/目录下配置为例,执行命令的时候,请以实际路径为准。

  1. 登录后端服务器,执行以下命令,安装Apache的一个第三方模块mod_rpaf。
     sudo wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz
     sudo tar zxvf v0.6.0.tar.gz
     sudo apt-get install apache2-dev
     sudo whereis apxs2
     sudo cd mod_rpaf-0.6.0/alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. 修改Apache的配置文件/alidata/server/httpd/conf/httpd.conf,在最末尾添加以下配置信息。
     LoadModule rpaf_module modules/mod_rpaf-2.0.so
     RPAFenable On
     RPAFsethostname On
     RPAFproxy_ips  <IP_address>
     RPAFheader X-Forwarded-For
    说明 如果您要获取代理服务器的地址,可以将代理服务器的网段添加到RPAFproxy_ips <IP_address>,如负载均衡的IP地址段100.64.0.0/10(100.64.0.0/10是阿里云保留地址,其他用户无法分配到该网段内,不会存在安全风险)和高防IP地址段。多个IP地址段用半角逗号(,)分隔。
  3. 添加完成后重启Apache。
    sudo /alidata/server/httpd/bin/apachectl restart

配置Nginx服务器

本文以安装目录alidata/为例,执行命令的时候,请以实际路径为准。

  1. 登录后端服务器,执行以下命令,安装http_realip_module。
     sudo wget http://nginx.org/download/nginx-1.0.12.tar.gz
     sudo tar zxvf nginx-1.0.12.tar.gz
     sudo cd nginx-1.0.12
     sudo ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
     sudo make
     sudo make install
     sudo kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`
     sudo kill -QUIT `cat /alidata/server/nginx/logs/ nginx.pid.oldbin`
  2. 执行以下命令,打开nginx.conf文件。
    sudo vi /alidata/server/nginx/conf/nginx.conf
  3. 在以下配置信息后添加新的配置字段和信息。
     fastcgi connect_timeout 300;
     fastcgi send_timeout 300;
     fastcgi read_timeout 300;
     fastcgi buffer_size 64k;
     fastcgi buffers 4 64k;
     fastcgi busy_buffers_size 128k;
     fastcgi temp_file_write_size 128k;

    需要添加的配置字段和信息为:

     set_real_ip_from IP_address;
     real_ip_header X-Forwarded-For;
    说明 如果您要获取代理服务器的地址,可以将代理服务器的网段添加到set_real_ip_from <IP_address>,如负载均衡的IP地址段100.64.0.0/10(100.64.0.0/10是阿里云保留地址,其他用户无法分配到该网段内,不会存在安全风险)和高防IP地址段。多个IP地址段用逗号分隔。
  4. 执行以下命令,重启Nginx。
    sudo /alidata/server/nginx/sbin/nginx -s reload