开发者社区> 舟翁> 正文

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)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化
在前端优化中,js、css等文件的优化一般都是压缩的优化,进行合并、减小体积以达到减小请求的目的。 今天发现了一个集成在VS中的压缩插件,使得压缩变得比较快捷。 配置方法 首先需要去下载Microsoft Ajax Minifier,一路安装就可以,如果VS正在使用,需要重启。
851 0
nginx 代理模式下,获取客户端真实IP
  最近做博友推荐,发现个小问题,用$_SERVER['REMOTE_ADDR'];得到的都是服务器的地址192.
830 0
[前端优化]使用Combres合并对js、css文件的请求
在前端优化的各种金律铁规中,“减少客户端对资源的请求”都会在其中出现,刚好最近对网站做一些优化,使用了一下Combres组件,有点心得,遂整理成文。 园子中也有几篇Combres组件的介绍,如:Combres库学习小结以及部分源码分析和使用Combres 库 ASP.NET 网站优化。
879 0
Apache Flink 零基础入门(四):客户端操作的 5 种模式
本文主要分享 Flink 的 5 种任务提交的方式。熟练掌握各种任务提交方式,有利于提高我们日常的开发和运维效率。
4980 0
因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug
## Java 请求信息 ```bash GET / HTTP/1.1 Host: localhost:7003 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.
1385 0
阿里云ECS服务器搭建SpringBoot后端接驳微信小程序前端使用心得
在阿里云搭建SpringBoot后端,碰到服务器端口无法访问的问题,客服予以解决,希望发表给大家带来一些参考。
15 0
PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。 HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。
947 0
阿里云ECS服务器搭建SpringBoot后端接驳微信小程序前端使用心得 #飞天加速计划·高校学生在家实践
了解到飞天加速计划,大学生可以免费体验阿里云ECS服务器。想到最近在弄的一个小程序后端在部署在阿里云服务器,前来尝试了阿里云的服务。使用过程很顺畅,也碰到了服务器端口3306无法访问的问题,咨询了客服给我了很满意的解决方案。希望发表给大家带来一些参考。希望大家可以避开这个坑。
47 0
+关注
舟翁
阿里云售后工程师
6
文章
2
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载