在现今的互联网架构中,用户访问一个网站的过程往往不再是一个简单的直线流程。相反,它更像是一个曲折的旅程,用户的请求可能会经过多个代理服务器,如CDN、高防IP、WAF等,最后才到达源站服务器。在这样的架构下,如何获取到发起请求的真实客户端IP成为了网站运营者需要面对的一个重要问题。
一种常见的解决方案是利用代理服务器在转发请求时,在HTTP请求头中添加X-Forwarded-For记录。这个记录会详细标注出用户的真实IP以及请求经过的所有代理服务器IP。这样,源站服务器就可以通过这个记录来识别出真实的客户端IP。
对于Nginx这样的Web服务器来说,可以通过http_realip_module模块来实现对X-Forwarded-For记录的解析。这个模块允许Nginx根据X-Forwarded-For记录中的信息,将请求的来源IP识别为用户的真实IP。
要实现这一功能,首先需要确保Nginx在编译时已经安装了http_realip_module模块。如果没有,需要重新编译Nginx并添加该模块。然后,在Nginx的配置文件中,需要针对每个server块设置set_real_ip_from指令,指定哪些IP地址或IP段是可信的代理服务器。接着,通过real_ip_header指令指定X-Forwarded-For记录在哪个HTTP头中,最后通过real_ip_recursive指令开启递归解析,以排除set_real_ip_from中指定的IP地址。
另外,为了能够在Nginx的访问日志中看到真实的客户端IP,还需要修改日志记录格式。具体来说,就是需要将原来的remote-address字段替换为x-forwarded-for字段。
在实际操作中,获取WAF的回源IP地址是一个关键的步骤。这通常可以通过登录WAF的管理界面,查看相应的设置或产品信息来得到。得到这些IP地址后,需要按照Nginx的配置规则,将其添加到set_real_ip_from指令中。
总的来说,通过合理配置Nginx的http_realip_module模块,以及修改日志记录格式,我们就可以在多层代理架构下获取到真实的客户端IP。这对于网站的访问统计、安全防护、用户行为分析等方面都有着重要的价值。