如何在我的 Cloud-运行 Flask 应用程序中获取用户的 IP 地址?

How can I get the user's IP-Address in my Cloud-Run Flask app?

我有一个 Flask 应用程序 运行 通过 Google Cloud 运行 我需要知道用户的 IP 地址。 我正在使用 gunicorn 作为我的服务器。 我试过以下代码:

request.remote_addr
request.environ['REMOTE_ADDR']
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)

它正在返回此 IP 地址:169.254.8.129不是我的。 这可能是应用程序和用户之间的负载均衡器的 IP?

有没有办法在不使用额外服务的情况下获得正确的 IP 地址?

您有 headers 由 Google 提供。在我的测试中,我得到了这些 2:

X-Forwarded-For: [MyPubliCIp, LoadBalancerIp,MyPubliCIp]
Forwarded: [for="MyPubliCIp";proto=http]

随心所欲地使用它们。

在 Cloud 运行 中,在 Flask 路由中我这样做了:

ip = request.environ.get("HTTP_X_FORWARDED_FOR", request.remote_addr)
logging.info(f"IP ADDRESS: {ip}")

有了这个我可以得到请求者 public IP 地址。

request.remote_addr 适用于 App Engine 等服务器。

我是 运行 我在 Google App Engine 中的服务,没有得到上述任何工作,但这确实有效。

ip = request.headers['X-Appengine-User-Ip']