如何获取客户端真实IP
最近更新时间: 2024-10-17 17:10:00
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