如何获取客户端真实IP
CLB 的四层(TCP/UDP)和七层(HTTP/HTTPS)服务均支持直接在后端 CVM 上获取客户端真实 IP,无需进行额外配置。
- 四层负载均衡:在后端 CVM 上获取的源 IP 即为客户端 IP。
- 七层负载均衡:您可以通过
X-Forwarded-For
或remote_addr
字段来直接获取客户端 IP。
说明: 对于 CLB 来说,无需在后端 CVM 上做额外配置即可获取客户端 IP。 对于其他做了 SNAT 的七层负载均衡服务,您需要在后端 CVM 上配置,然后使用
X-Forwarded-For
的方式获取客户端的真实 IP。
下文将对常见的应用服务器配置方案进行介绍。
IIS 6 配置方案
- 下载与安装插件 F5XForwardedFor 模块,根据自己的服务器操作系统版本将
x86\Release
或者x64\Release
目录下的F5XForwardedFor.dll
拷贝到某个目录,这里假设为C:\ISAPIFilters
,同时确保对 IIS 进程对该目录有读取权限。 - 打开 IIS 管理器,找到当前开启的网站,在该网站上右键选择【属性】,打开属性页。
- 在属性页切换至【ISAPI 筛选器】,单击【添加】,弹出添加窗口。
- 在添加窗口“筛选器名称”中填写“F5XForwardedFor”,“可执行文件”填写
F5XForwardedFor.dll
的完整路径,单击【确定】。 - 重启 IIS 服务器,等待配置生效。
IIS 7 配置方案
-
下载与安装插件 F5XForwardedFor 模块,根据自己的服务器操作系统版本将
x86\Release
或者x64\Release
目录下的F5XFFHttpModule.dll
和F5XFFHttpModule.ini
拷贝到某个目录,这里假设为C:\F5XForwardedFor
,确保对 IIS 进程对该目录有读取权限。 -
选择【IIS服务器】,双击【模块】功能。
-
单击【配置本机模块】。
-
在弹出框中单击【注册】。
-
添加下载的 DLL 文件,如下图所示:
-
添加完成后,勾选并单击【确定】。
-
在 “ISAPI 和 CGI 限制”添加如上两个 DLL,并将限制设置为允许。
-
重启 IIS 服务器,等待配置生效。
Apache 配置方案
-
安装 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 -
修改 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 -
添加完成后,重启 Apache:
/usr/sbin/apachectl restart
Nginx 配置方案
-
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 -
修改
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; -
重启 Nginx:
service nginx restart