X-Forwarded-For 负载均衡 7 层 HTTP 模式获取来访客户端真实 IP 的方法(IIS/Apache/Nginx/Tomcat)

简介: https://help.aliyun.com/knowledge_detail/13051859.html?pos=1 1、IIS 6 配置方案2、IIS 7 配置方案3、Apache 配置方案4、Nginx 配置方案5、Tomcat 配置方案 4 层负载均衡(TCP 协议)服务可以直接在后端 ECS 上获取来访者真实 IP 地址,无需进行额外的配置,以下介绍的内容均是针对 7 层(HTTP 协议)的负载均衡服务而言。

https://help.aliyun.com/knowledge_detail/13051859.html?pos=1

1、IIS 6 配置方案
2、IIS 7 配置方案
3、Apache 配置方案
4、Nginx 配置方案
5、Tomcat 配置方案


4 层负载均衡(TCP 协议)服务可以直接在后端 ECS 上获取来访者真实 IP 地址,无需进行额外的配置,以下介绍的内容均是针对 7 层(HTTP 协议)的负载均衡服务而言。7 层负载均衡系统提供 X-Forwarded-For 的方式获取访问者真实 IP,默认开启,用户无需配置。

1.png

以下针对常见的应用服务器配置方案进行介绍:

IIS 6 配置方案

通过 IIS 6日志中获取来访者真实IP地址的解决方案,首先需要安装插件 F5XForwardedFor.dll,下载地址

1、 根据自己的服务器操作系统版本将 x86\Release 或者 x64\Release 目录下的 F5XForwardedFor.dll 拷贝到某个目录,这里假设为 C:\ISAPIFilters,同时确保对IIS进程对该目录有读取权限。

2、打开 IIS 管理器,找到当前开启的网站,在该网站上右键选择 “属性”,打开属性页。

3、在属性页切换至“ ISAPI 筛选器”,点击“添加”按钮,出现添加窗口。

4、在添加窗口:“筛选器名称”填写“F5XForwardedFor”,“可执行文件”填写 F5XForwardedFor.dll 的完整路径,点击确定。

5、重启 IIS 服务器,等待配置生效。

IIS 7 配置方案

1、通过 F5XForwardedFor 模块获取来访者真实IP地址的解决方案,首先需要下载与安装插件 F5XForwardedFor 模块,下载地址

2、根据自己的服务器操作系统版本将 x86\Release 或者 x64\Release 目录下的 F5XFFHttpModule.dll 和 F5XFFHttpModule.ini 拷贝到某个目录,这里假设为 C:\F5XForwardedFor\,确保对IIS 进程对该目录有读取权限。

3、选择“ IIS 服务器”选项,按图所示选择“模块”功能:

4、双击“模块”功能,点击“配置本机模块”:

2.png

在弹出框中点击“注册”按钮:

3.png

5、添加下载的 DLL 文件,如下图:

7.png

6、添加完成后,勾选并点击“确定”:

8.png

7、把这两个 DLL 在 “ API 和CGI限制 ”进行添加,并改为允许:

9.png

10.png

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
/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地址 RPAFheader X-Forwarded-For 

//RPAFproxy_ips IP地址(这个ip地址不是负载均衡提供的公网IP,具体IP请检查 Apache 日志,通常会有 2 个 都要写上)

3、 添加完成后重启 Apache

/alidata/server/httpd/bin/apachectl restart

4、 具体范例

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On RPAFproxy_ips 10.0.0.65 10.0.0.66 RPAFheader X-Forwarded-For

Nginx 配置方案

1、Nginx 作为负载均衡获取真实 IP 是使用 http_realip_module,默认一键安装包安装的 Nginx 是没有安装这个模块的,需要重新重新编译 Nginx 并加装:
重新编译 Nginx 增加 --with-http_realip_module

wget http://soft.phpwind.me/top/nginx-1.0.12.tar.gz
tar zxvf nginx-1.0.12.tar.gz
cd nginx-1.0.12 ./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 make make install kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid` kill -QUIT `cat /alidata/server/nginx/logs/ nginx.pid.oldbin`

2、修改 nginx.conf

vi /alidata/server/nginx/conf/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日志,如果有多个都要写上。)
set_real_ip_from ip地址;(这个ip地址首先不是负载均衡提供的公网ip,具体ip多少可以看一下之前nginx日志,如果有多个都要写上。)
real_ip_header X-Forwarded-For;

3、重启 Nginx

/alidata/server/nginx/sbin/nginx -s reload

Tomcat 配置方案

 Tomcat 的配置方法参考如下步骤。

1、修改 Tomcat 的 server.xml 配置文件

vim server.xml

在配置文件的最下边,找到如下配置

prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

4.png

修改成以下内容:

prefix="localhost_access_log" suffix=".txt"
pattern="%{X-Forwarded-For}i %h %l %u %t "%r" %s %b" />

就是把默认配置文件中的 pattern 这行中,添加了 %{X-Forwarded-For}i 。

5.png

2、修改完配置文件后,重新启动一下 Tomcat,然后查看 Tomcat 的访问日志,可以看到日志中已经正常记录用户的真实访问 IP 地址。

tail  localhost_access_log.2015-xx-xx.txt

6.png

3、如下是 Java 代码获取 X-Forwarded-For 的示例代码

/** 
* 获取ip地址,防止集群、代理
* @param request 
* @return ip
*/ 

public static String getAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }

 

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
5天前
|
安全 网络协议 网络安全
干货|代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理
HTTP和HTTPS是互联网主要的两大协议,HTTP是基础的简单请求-响应协议,常用于TCP上,但数据传输不安全。HTTPS是HTTP的安全版本,添加了SSL层进行加密和身份验证,提供更高的安全性,用于保护数据和验证网站真实性。HTTPS需CA证书,可能产生费用,并使用443端口而非HTTP的80端口。
|
5天前
|
网络协议 安全 数据安全/隐私保护
干货|代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理
SOCKS5和HTTP是两种代理协议,前者是通用型,支持多种网络流量,提供身份验证、IPv6支持及UDP兼容性,更适合实时数据传输。HTTP代理专用于HTTP协议,适用于Web资源请求。SOCKS5在传输方式、功能、兼容性和安全性上更胜一筹,而HTTP代理则在处理HTTP请求时更专业。选择代理协议应根据需求和应用场景,考虑服务的稳定性和安全性。付费代理如kookeey全球代理,支持双协议,速度快且可扩展性强,是可靠的选择。
|
5天前
|
网络协议 应用服务中间件 nginx
nginx 302 301 设置 url 转跳 nginx 资源重定向 nginx tcp 和 http 转发
nginx 代理后端网站,和 网站资源目录重定向到其他连接地址
72 3
|
5天前
|
API
http代理ip请求并发数是什么?有什么用?
HTTP代理IP请求并发数指单个客户端对API或代理IP同时发起的请求数量,分为API链接请求并发和IP最大连接数。并发是瞬时同时请求,不同提供商限制不同。高并发请求的代理IP服务商能更好地应对程序压力。选择时应考虑这一因素。
|
5天前
|
网络安全 API Apache
如何在win系统部署Apache服务并实现无公网ip远程访问
如何在win系统部署Apache服务并实现无公网ip远程访问
|
5天前
|
弹性计算 Shell Apache
某时间段访问apache 服务器的请求IP
【4月更文挑战第29天】
17 2
|
5天前
|
数据采集 缓存 网络协议
静态代理IP是否支持HTTP和HTTPS?
静态代理IP支持HTTP、HTTPS、FTP、Socks5等协议,HTTP协议因其简单、灵活而常用,通常比HTTPS速度快,因无需加密处理。HTTP代理比SOCKS5代理通常更快,因为HTTP专注于HTTP请求,而SOCKS5处理多种网络流量。静态HTTP代理适合浏览器和爬虫,SOCKS5代理支持更多协议,如TCP、UDP。选择取决于应用场景和需求。
|
5天前
|
数据采集
如何选择高质量http/Socks5代理ip?
选择高质量HTTP、Socks5代理IP对爬虫和数据采集至关重要。了解代理IP类型,根据需求选择HTTP或Socks5代理。选择稳定、快速、分布广泛、数量充足且不易被封的代理IP供应商。关注代理IP速度、质量、稳定性、区域和使用频率。测试代理IP的连接速度、可用性、匿名性和使用频率。定期更换代理IP以保持效率和可靠性。
|
5天前
|
监控 安全 API
在使用HTTP代理IP的需要注意什么?
在使用HTTP代理IP时,关键点包括选择可靠服务商、确保匿名性、合法合规使用、遵循服务商规定、定期更换IP、检测IP可用性、处理封禁、设置超时时间、监控服务商通知、使用加密协议、定期评估服务质量和遵守法规。这些措施能保证代理的有效性、安全性和合规性。

推荐镜像

更多