文档中心 负载均衡 最佳实践 七层转发获取来访真实IP的方法

七层转发获取来访真实IP的方法

最近更新时间:2019-03-06 20:23:59

  • 由于4层负载均衡(TCP 协议)服务可以直接在后端 CVM 获取来访者真实 IP 地址,无需进行额外的配置,下文介绍的均是7层(HTTP 协议)的负载均衡服务的相关内容。
  • 7层负载均衡系统提供 X-Forwarded-For 的方式获取访问者真实 IP,LB 侧默认开启,需要后端服务做相应配置来获取 client IP。

下文将对常见的应用服务器配置方案进行介绍。

IIS 6 配置方案

  1. 安装插件 F5XForwardedFor.dll,根据自己的服务器操作系统版本将x86\Release或者x64\Release目录下的F5XForwardedFor.dll拷贝到某个目录,这里假设为C:\ISAPIFilters,同时确保对 IIS 进程对该目录有读取权限。
  2. 打开 IIS 管理器,找到当前开启的网站,在该网站上右键选择【属性】,打开属性页。
  3. 在属性页切换至【ISAPI筛选器】,单击【添加】,弹出添加窗口。
  4. 在添加窗口“筛选器名称”中填写“F5XForwardedFor”,“可执行文件”填写F5XForwardedFor.dll的完整路径,单击【确定】。
  5. 重启 IIS 服务器,等待配置生效。

IIS 7 配置方案

  1. 下载与安装插件 F5XForwardedFor 模块,根据自己的服务器操作系统版本将x86\Release或者x64\Release目录下的F5XFFHttpModule.dllF5XFFHttpModule.ini拷贝到某个目录,这里假设为C: \F5XForwardedFor,确保对 IIS 进程对该目录有读取权限。
  2. 选择【IIS服务器】选项,选择【模块功能】。
  3. 双击【模块】功能,单击【配置本机模块】。
  4. 在弹出框中单击【注册】。
  5. 添加下载的 DLL 文件,如下图所示:
  6. 添加完成后,勾选并单击【确定】。
  7. 把这两个 DLL 在 “API 和CGI限制”进行添加,并改为允许。
  8. 重启 IIS 服务器,等待配置生效。

Apache 配置方案

  1. 安装 Apache 第三方模块“mod_rpaf” 。
    wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
    tar zxvf mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /usr/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. 修改 Apache 配置/etc/httpd/conf/httpd.conf,在最末尾添加:
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips IP地址(这个IP地址首先不是负载均衡提供的公网IP,具体IP多少可以查看Apache日志,通常会有2个 都要写上)
    RPAFheader X-Forwarded-For
  3. 添加完成后,重启 Apache。
    /usr/sbin/apachectl restart

Nginx 配置方案

  1. Nginx 作为负载均衡获取真实 IP 时使用 http_realip_module,默认安装的 Nginx 是没有安装这个模块的,需要重新编译 Nginx 增加 --with-http_realip_module。
    wget  http://nginx.org/download/nginx-1.14.0.tar.gz 
    tar  zxvf nginx-1.14.0.tar.gz 
    cd nginx-1.14.0
    ./configure --user=www --group=www --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
    make
    make install
  2. 修改 nginx.conf。
    vi /etc/nginx/nginx.conf
    修改如下红色部分:

      
    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地址;(这个IP地址首先不是负载均衡提供的公网IP,具体IP多少可以查看之前nginx日志,如果有多个都要写上。)
    real_ip_header X-Forwarded-For;
    
    
  3. 重启 Nginx。
    service nginx restart