mod_extforward: 让lighttpd记录客户端的真实IP

该模块在1.4.14及以后的版本才有,主要功能是在使用了反向代理后,可以获取客户端真实IP地址,在使用了nginx或者NetScaler这样的反响代理/负载均衡设备以后,后段服务器的访问日志中看到的请求IP都是前面的nginx或者NetScaler的IP,而我们很多时候需要通过分析Log来查看用户访问的地理分布情况,这就需要记录来访用户的真实IP地址。

1.首先需要在前端的负载均衡设备上配置http头,插入一个"X-Forwarded-For"或者"X-Real-IP"。 在NetScaler上有两种方法可以实现,使用哪种要看具体需求。
如果后端的服务器上有ACL限制,并且是基于源地址的,那么使用USIP模式。
如果后端是http服务器,而且记录客户端IP的目的单纯是为了日志分析,那么推荐Client IP (CIP) insertion模式。

 

USIP模式配置方法:

打开全局USIP模式支持

enable ns mode USIP

在服务配置的时候,钩选USIP,或用下边命令

set service <serviceName> -usip YES


Client IP (CIP) insertion模式配置方法: 

set config -httpPort 80 -cip ENABLE <cipHeader>

set service test -cip ENABLED <cipheader>

2.修改lighttpd的配置文件,载入模块mod_extforward。
# vi /etc/lighttpd/lighttpd.conf
server.modules              = (
                               "mod_redirect",
                               "mod_alias",
                               "mod_rewrite",
                               "mod_expire",
                               "mod_access",
                               "mod_auth",
                               "mod_status",
                               "mod_fastcgi",
                               "mod_secdownload",
                               "mod_accesslog",
                               "mod_compress",
                    ### add mod_extforward ####
                               "mod_extforward"
)
将前端的nginx或者NetScaler地址加入到信任列表中:


extforward.forwarder = (
"10.10.28.5" => "trust",
"10.10.28.6" => "trust"
)
设置搜索指定的header,获取真正的用户IP

extforward.headers = ("X-Cluster-Client-Ip")
或者
extforward.headers = ("X-Real-Ip")

重起lighttpd服务
# service lighttpd restart

查看lighttpd的访问日志,应该可以看到记录了真正的用户IP。
# tail -f /var/log/lighttpd/access.log

 

不过此时使用netstat -na查看,你会发现连接的源地址还是nginx或NetScaler的IP地址。

参考文章:    http://www.cyberciti.biz/faq/nginx-extract-the-clients-real-ip-from-x-forwarded-for-header/

你可能感兴趣的:(nginx,负载均衡,service,HTTP服务器,lighttpd,redirect)