Apache前端使用SLB 7层转发,获取客户端真实IP的方法

简介: Apache 前端使用负载均衡SLB 7层(http/https)转发,Apache如何获取客户端真实IP?

Apache 前端使用负载均衡SLB 7层(http/https)转发,Apache如何获取客户端真实IP?

答案是通过HTTP头中的X-Forwarded-For 进行获取,SLB相当于一个代理,在转发HTTP请求时,会把客户端真实IP地址,加入到 X-Forwarded-For ,ECS上的Apache,可以进行配置取出X-Forwarded-For 记录的客户端真实ip。

下面介绍Apache如何进行配置。

需要安装一个Apache的第三方模块:mod_rpaf
这个模块也有好几个版本,建议安装 github上的:https://github.com/y-ken/mod_rpaf
好处是这个版本的模块,配置时支持IP段匹配的方式
(Support for partial IP address as '192.168.' for RPAFproxy_ips.)

以Centos6.8 yum安装的Apache为例 。
其他系统的安装方法,可以参考github上说明 https://github.com/y-ken/mod_rpaf
1、执行命令安装模块mod_rpaf

yum localinstall http://y-ken.github.com/package/centos/6/x86_64/mod_rpaf-fork-0.6-5.el6.x86_64.rpm

安装后会自动生成mod_rpaf的配置文件

/etc/httpd/conf.d/rpaf.conf

模块放在

/etc/httpd/modules/mod_rpaf-2.0.so

检查配置文件和模块都有了,说明已经正常安装成功。

ls /etc/httpd/conf.d/rpaf.conf 
ls /etc/httpd/modules/mod_rpaf-2.0.so

2、接下来修改模块 mod_rpaf 的配置文件

vi  /etc/httpd/conf.d/rpaf.conf

在默认配置的基础上,修改2行配置 RPAFproxy_ips 和 RPAFsethostname

RPAFproxy_ips: 设置SLB的内网IP地址,ip地址信息参考:https://help.aliyun.com/document_detail/27660.html
设置的IP地址可以用IP段的形式,多个IP之间空格隔开,注意SLB的内网IP段掩码,其中有 10 位和 15 位的掩码 100.64.0.0/10 ,100.116.0.0/15   可以合并可以写成  100. 

RPAFsethostname: 修改为On

修改后的配置内容

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 10.158. 10.159. 10.49. 100. 100.109. 100.97. 
RPAFheader X-Forwarded-For
RPAFsethostname On
RPAFsethttps Off
RPAFsetport Off

3、修改完配置后,重启Apache

service  httpd restart

然后查看Apache的访问日志,已经可以正常记录客户端真实访问Ip。

其中 HEAD / HTTP/1.0  是SLB的健康检查,

100.116.186.58 - - [20/Sep/2017:11:42:48 +0800] "HEAD / HTTP/1.0" 200 - "-" "-"
100.116.209.46 - - [20/Sep/2017:11:42:48 +0800] "HEAD / HTTP/1.0" 200 - "-" "-"
117.73.243.50 - - [20/Sep/2017:11:42:49 +0800] "GET / HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
![_](https://yqfile.alicdn.com/bc588aa4707c27c44637fb72f03835179654b8e8.png)
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
前端开发
前端接受后端文件流并下载到本地的方法
前端接受后端文件流并下载到本地的方法
60 0
|
4月前
|
人工智能 前端开发 测试技术
AI:探究下前端组件化设计的实现方法及其重要性(一)
AI:探究下前端组件化设计的实现方法及其重要性
|
4月前
|
人工智能 缓存 前端开发
AI:探究下前端组件化设计的实现方法及其重要性(二)
AI:探究下前端组件化设计的实现方法及其重要性
|
4天前
|
前端开发 JavaScript 开发者
【Web 前端】数组迭代的方法有哪些?
【4月更文挑战第22天】【Web 前端】数组迭代的方法有哪些?
|
4天前
|
前端开发
【Web 前端】对于数组去重都有哪些方法?
【4月更文挑战第22天】【Web 前端】对于数组去重都有哪些方法?
|
4天前
|
前端开发 JavaScript
【Web 前端】JS继承的方法有哪些?
【4月更文挑战第22天】【Web 前端】JS继承的方法有哪些?
|
4天前
|
前端开发 JavaScript UED
【Web 前端】说几个未知宽高元素水平垂直居中方法?
【4月更文挑战第22天】【Web 前端】说几个未知宽高元素水平垂直居中方法?
|
4天前
|
前端开发 容器
【Web 前端】清除浮动有哪些方法?
【4月更文挑战第22天】【Web 前端】清除浮动有哪些方法?
|
10天前
|
前端开发 JavaScript API
前端代码优化方法
前端代码优化方法
6 0
|
14天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
25 11

推荐镜像

更多