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,默认开启,用户无需配置。

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

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、双击“模块”功能,点击“配置本机模块”:

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

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
/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" />

修改成以下内容:

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

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

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

tail  localhost_access_log.2015-xx-xx.txt

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;
}

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

  1. Tomcat负载均衡、调优核心应用进阶学习笔记(三):LNMT nginx+tomcat、LAMT apache+tomcat、session会话保持、不错的站点

    文章目录 LNMT nginx+tomcat LAMT apache+tomcat 基于mod_proxy 单节点 配置基于mod_proxy的负载均衡 基于mod_jk(需要编译安装) 单节点 配置 ...

  2. nginx做负载均衡 tomcat获得客户端真实ip

    因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代理服务器的ip 通过百度教材发现需要修改nginx的配置文件,修改代理头信息,传递给后方,后 ...

  3. 某云负载均衡获取客户端真实IP的问题

    某云负载均衡真实IP的问题,我们这边已经遇到过两次了.而且每次和售后沟通的时候都大费周折,主要是要给售后说明白目前文档的获取真实IP是有问题的,他们觉得文档上说明的肯定没问题,售后要是不明白,他们不会 ...

  4. Nginx 负载均衡 后端服务器获取前端用户真实IP

    Nginx 后端 日志文件 获取的都是 前端 负载均衡器的IP 想要获取用户的真实IP 必须 使用Nginx 的模块  http_realip_module  才行!! 1. 编译 Nginx 的时候 ...

  5. Docker Swarm 负载均衡详解 or 模式选择

    Docker Swarm 负载均衡详解 Swarm模式内置DNS组件,可以自动为集群中的每个服务分配DNS记录. Swarm manager使用内部负载均衡,根据服务的DNS名称在集群内的服务之间分发 ...

  6. LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

    一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...

  7. LVS负载均衡群集部署——DR模式

    LVS负载均衡群集部署--DR模式 1.LVS-DR概述 2.部署实验 1.LVS-DR概述: LVS-DR(Linux Virtual Server Director Server)工作模式,是生产 ...

  8. LVS负载均衡群集部署——NAT模式

    LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...

  9. Lvs 负载均衡 (VS/NAT模式)

    一.LVS简介 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirt ...

随机推荐

  1. springbatch---->springbatch的使用(六)

    前面的例子step都是线性的流程,这里我们提供一个非线性的流程,也就是根据不同的状态做不同的流程step处理.万一有天悔恨变得太现实太世故太麻木,说不定能从回忆中重拾随兴飞翔. step非线性的流程 ...

  2. 【大数据系列】在windows下连接linux 下的hadoop环境进行开发

    一.下载Eclipse并安装 二.下载exlipse的hadoop plugin 三.打开Map Reduce视图 Window --> Perspective --> Open pers ...

  3. Sencha Touch 实战开发培训 电子书 基础篇

    本期课程基于Sencha Touch 2.4.1,属于新手实战入门课程,侧重于实用性. 课程目录: 开源Demo:https://bitbucket.org/moLangZaiShi/demo 本课程 ...

  4. sencha touch 类的使用

    sencha touch 有一套自己的类机制,可以以面向对象的方式去写代码,封装业务逻辑,sencha touch 的组件.插件.api等都建立在这一套类机制的上面 在实际开发中,我们需要遵循这一套机 ...

  5. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  6. 【OOP】C++ const成员函数

    预备知识 1.代码转换分析技巧 在早期某些编译器会将C++代码翻译为C代码,然后使用C编译器生成可执行文件.其中翻译的一个转化就是:将this指针显式添加到成员函数的第一个参数位置上,并在成员函数调用 ...

  7. 【CF908E】New Year and Entity Enumeration 位运算+DP

    [CF908E]New Year and Entity Enumeration 题意:给定$M=2^m-1$,我们称一个集合S是好的,当且仅当它满足:1.$\forall a\in S,a\  \ma ...

  8. mysql概要(十四)(一)索引

    1.索引是对数据库数据建立目录加快了查询速度.索引分为哈希索引和二叉树索引 (大数据量转移,如果表中带有大量字段索引,进行数据导入时,建议先去掉索引导入数据再统一加入索引,减少索引计算量) 2.索引原 ...

  9. flask BytesIO() 多个文件打包下载 zipfile

    使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...

  10. [译] 深入理解 JavaScript 事件循环(二)— task and microtask

    引言 microtask 这一名词是 JS 中比较新的概念,几乎所有人都是在学习 ES6 的 Promise 时才接触这一新概念,我也不例外.当我刚开始学习 Promise 的时候,对其中回调函数的执 ...