运维部落

首页 > Linux, 解决方案 > 安装mod_rpaf让apache获取访客真实IP

安装mod_rpaf让apache获取访客真实IP

2013年10月6日

mod_rpaf是apache的一个模块,目的是为了获取访客的真实IP,下面是安装方法:
官方网站:http://www.stderr.net/apache/rpaf/

情况一:
Apache前有Varnish
有些网站使用这样的方式来分离静态请求和动态请求,Varnish放在前面处理静态请求,然后再把动态请求转发给后面的Apache,不过如此一来,Apache日志里看到的IP就是Varnish的IP了,为了能让Apache透明获取IP,可以使用mod_rpaf:

配置很简单,只需在配置文件里加上如下内容:

LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.0.1
RPAFheader X-Forwarded-For

说明:192.168.0.1指的是Varnish内网IP,可以设置多个IP。
这 只是告诉Varnish在反向代理的时候发送域名和客户真实IP Apache未必就会按照这个来接收,所以这里推荐一个apache的第三方的mod
引用:

说明:http://stderr.net/apache/rpaf/
下载: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/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

如果出现如下错误:

mod_rpaf-2.0.c: In function ‘rpaf_cleanup’:
mod_rpaf-2.0.c:150: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_rpaf-2.0.c:151: error: ‘conn_rec’ has no member named ‘remote_addr’
mod_rpaf-2.0.c:151: warning: implicit declaration of function ‘inet_addr’
mod_rpaf-2.0.c:151: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_rpaf-2.0.c: In function ‘change_remote_ip’:
mod_rpaf-2.0.c:164: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_rpaf-2.0.c:183: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_rpaf-2.0.c:186: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_rpaf-2.0.c:187: error: ‘conn_rec’ has no member named ‘remote_addr’
mod_rpaf-2.0.c:187: error: ‘conn_rec’ has no member named ‘remote_ip’
apxs:Error: Command failed with rc=65536

#将mod_rpaf-2.0.c的150、151、164、183、186、187这几行的remote_ip修改成client_ip,remote_addr修改成client_addr。

接 着在 httpd.conf中添加

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
# 填写Varnish的来访IP
RPAFheader X-Forwarded-For

这样就可以获取客户端访问的真实IP了。

情况二:
比如后台是iis那么就这样:
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xvfz mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
安装好了之后,需要对httpd.conf文件进行配置。
1、在httpd.conf加入如下代码:


RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

加载模块代码:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
2、并定义日志格式

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" varnishcombined
3、以后可以使用如下代码启用此格式的日志:

CustomLog “/home/wwwlogs/$domain.log” varnishcombined

分类: Linux, 解决方案 标签:
本文的评论功能被关闭了.