如何从AWS、Google Cloud LB和Cloudflare中获取客户端IP在Nginx中?
在云中设置一个网页应用程序总是有趣和令人兴奋的。
最近,我推出了一个Geekflare Tools工具,它托管在AWS上,在Cloudflare后面。
我正在使用AWS应用程序负载均衡器和Nginx作为Web服务器。在完成后,我去看访问日志,并注意到所有请求都标记为来自内部(负载均衡器)IP。
如果你想为访客位置进行链接,则这样不好。我意识到我遗漏了或需要进行一些配置更改才能恢复客户端IP。
你是否处于和我当时一样的情况?
好吧,下面是如何在Nginx访问日志中获取客户端IP的方法。
从AWS或Google Cloud LB获取访问者IP
- 登录到你的Nginx Web服务器
- 进入安装路径(默认位置为/etc/nginx)
- 备份
nginx.conf
文件 - 在HTTP块下添加以下内容
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
- 重启Nginx,你应该在access.log文件中看到访问者的IP
如果你在Cloudflare后面,那么你将看到他们的IP而不是客户端的IP,所以你还需要执行以下操作。
从Cloudflare获取客户端IP
Cloudflare是一个很好的CDN和Security provider,我非常喜欢它。如果你像我一样使用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;
注意:你可能需要从他们的official page验证IP列表。
重启Nginx,现在你应该看到客户端IP。这对我有帮助,希望对你也有帮助。
接下来,找出如何实现secure headers using Cloudflare Workers。