mod_extforward:逆向代理/负载均衡器背后的Lighttpd日志客户端真实IP

时间:2020-01-09 10:42:46  来源:igfitidea点击:

我有在基于Nginx的反向代理/负载均衡器后面设置了5个lighttpd Web服务器,以为繁忙的电子商务网站分配负载。
但是,所有Web服务器节点都将我的负载均衡器的两个IP地址放在访问日志文件中。
如何强制lighttpd记录访问我们网站的所有客户端计算机的真实IP(公共IP)地址?
您需要使用Lighttpd下的mod_extforward从X-Forwarded-For或者X-Real-IP标头中提取并记录客户端真实IP,该标头由反向代理服务器(例如Nginx或者Squid代理服务器)添加。

配置

编辑lighttpd.conf文件,执行:

# vi /etc/lighttpd/lighttpd.conf

"警告!" mod_extforward包含在lighttpd 1.4.14及更高版本中。

在server.modules指令的末尾添加mod_extforward(顺序很重要):

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

添加您的代理服务器/反向代理负载平衡器IP

添加基于nginx的反向代理ip(LB IP),例如10.10.28.5和10.10.28.6:

extforward.forwarder = (
     "10.10.28.5" -  "trust",
     "10.10.28.6" -  "trust" 
  )

保存并关闭文件。

如何设置客户端自定义IP标头?

您还可以使用以下语法设置标头来搜索以查找客户端的原始IP地址:

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

或者

extforward.headers = ("X-Real-Ip")

重新启动Lighttpd

最后,重新启动lighttpd Web服务器,执行:

# service lighttpd restart

您可以使用tail命令查看访问日志:

# tail -f /var/log/lighttpd/access.log