在云端环境中获取Web应用程序的访客真实IP地址
在云平台上部署Web应用程序是一项充满乐趣且令人兴奋的任务。最近,我推出了一个名为techblik.com Tools的工具,它被托管在亚马逊云服务(AWS)中,并使用了Cloudflare作为其前端保护。
我的Web服务器采用了AWS的应用程序负载均衡器和Nginx。然而,在查看访问日志(access.log)时,我发现所有的请求都被标记为来自内部(负载均衡器)的IP地址。这对于需要分析访客地理位置的Web服务器日志来说是毫无用处的。我意识到,我需要进行一些配置调整来恢复访客的真实IP。
如果您也面临类似的情况,那么接下来的内容将对您有所帮助。
以下是在Nginx访问日志中获取访客真实IP地址的方法。
从AWS或Google Cloud负载均衡器获取访客IP
- 首先,登录到您的Nginx Web服务器。
- 进入Nginx的安装目录(默认路径为/etc/nginx)。
- 备份现有的nginx.conf文件,以防需要恢复。
- 在http块中,添加以下配置:
real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0;
- 完成以上步骤后,重启Nginx服务。此时,您应该可以在access.log文件中看到访客的真实IP地址。
然而,如果您的Web应用程序还使用了Cloudflare,那么您看到的将是Cloudflare的IP地址,而不是客户端的IP地址。因此,您还需要执行以下额外步骤。
从Cloudflare获取客户端真实IP
Cloudflare是一个强大的CDN和安全服务提供商,我非常喜欢使用它。如果您也像我一样使用Cloudflare,并希望在Web服务器日志中恢复访客的真实IP地址,您可以按照以下步骤进行操作。
假设您已经登录到Nginx服务器,并完成以下操作:
备份您的站点配置文件(通常位于/etc/nginx/sites-available/yourdomain)。
在文件开头添加以下配置:
set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 199.27.128.0/21; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; real_ip_header CF-Connecting-IP;
注意:为了确保IP地址列表的准确性,您可能需要从Cloudflare官方网站获取最新的IP列表。
完成以上配置后,再次重启Nginx服务。现在,您应该可以在访问日志中看到客户端的真实IP地址了。这个方法对我非常有帮助,希望它也能帮助到您。
接下来,我将介绍如何使用Cloudflare Workers来实施安全标头。
如果觉得本文对您有所帮助,欢迎分享给其他人!