如何在 Nginx 中从 AWS、Google Cloud LB 和 Cloudflare 获取客户端 IP?

在云中设置 Web 应用程序总是既有趣又令人兴奋。

最近,我推出了一个 techblik.com Tools 工具,它托管在 Cloudflare 后面的 AWS 中。

我正在使用 AWS 应用程序负载均衡器和 Nginx 作为 Web 服务器。 生活结束后,我去看了 access.log,发现所有请求都被标记为来自内部(负载均衡器)IP。

如果您想分析访问者位置的 Web 服务器日志,这就不好了。 我意识到我缺少或需要做一些配置更改来恢复客户端 IP。

你是和我一样的情况吗?

好吧,这是在 Nginx 访问日志中获取客户端 IP 的方法。

从 AWS 或 Google Cloud LB 获取访客 IP

  • 登录到您的 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

如果您在 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 列表 官方网站.

  用于实时协作的 9 个最佳在线白板

重新启动 Nginx,您现在应该可以看到客户端 IP。 这对我有帮助,我希望你也一样。

接下来,了解如何使用 Cloudflare Workers 实施安全标头。

喜欢阅读这篇文章吗? 与世界分享怎么样?