从负载均衡器获取Orgin IP

时间:2016-02-06 20:27:48

标签: google-compute-engine google-cloud-platform

有没有办法从GCloud的HTTP负载平衡中获取用户的原始IP?我们目前只使用网络负载平衡,并且需要转移到跨区域平衡器,尽管我们需要用户的IP来进行合规性和日志记录。

它是否传入标题或沿着这些行的东西?

谢谢~Z

5 个答案:

答案 0 :(得分:7)

文档(https://cloud.google.com/compute/docs/load-balancing/http/)表示它是X-Forwarded-For标头的第一个IP地址。

  X-Forwarded-For: <client IP(s)>, <global forwarding rule external IP>

答案 1 :(得分:4)

如果您确定没有在Google Cloud Balancing之后运行任何其他代理(将额外的IP附加到X-Forwarded-For),您可以从X-Forwarded获取倒数第二个IP - 用作直接客户端IP 。或者即使你有一些代理但知道要追加的其他IP的确切数量,你也可以考虑这些代理。

来自https://cloud.google.com/compute/docs/load-balancing/http/#components

  

X-Forwarded-For: <unverified IP(s)>, <immediate client IP>, <global forwarding rule external IP>, <proxies running in GCP> (requests only)

     

负载均衡器仅提供<immediate client IP><global forwarding rule external IP>个条目。所有其他条目   列表在未经验证的情况下传递。

即时客户端IP之前的IP可能是来自客户端代理的欺骗性IP或IP。即使客户端欺骗X-Forwarded-For标头,负载均衡器仍会附加到达负载均衡器的实际IP。

答案 2 :(得分:1)

好的,所以在通过标题和其他东西挖掘后,我发现以下标题是为用户传递原始IP和IP。

$_SERVER['HTTP_X_FORWARDED_FOR']

您需要将其拆分为','并取出字符串的第一部分。这是用户IP,由Google Cloud HTTP Balancer推送。

答案 3 :(得分:0)

基于 HTTP_X_FORWARDED_FOR 标头,一个很好的Nginx规则用于拆分IP链:

set $realip $remote_addr;
if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {
  set $realip $1;
}
fastcgi_param REMOTE_ADDR $realip;

将其粘贴到 include fastcgi_params; 指令后生效。

如果您使用的是Cloudflare,则可以从 HTTP_CF_CONNECTING_IP 获取原始客户端IP。

答案 4 :(得分:0)

我找到了这篇文章 https://geko.cloud/forward-real-ip-to-a-nginx-behind-a-gcp-load-balancer/

您可以白名单/忽略 GCP 已知的 IP,例如注册负载均衡器所需的静态 IP

set_real_ip_from 36.129.221.25/32; // LB Public IP address
set_real_ip_from 130.211.0.0/22; // Private IP range for GCP Load Balancers
set_real_ip_from 35.191.0.0/16; //Private IP range for GCP Load Balancers
real_ip_header X-Forwarded-For;
real_ip_recursive on;
相关问题