使用带有 ProxyFix 的 Flask 在 GAE 上获取 IP 地址

Get IP address on GAE with Flask with ProxyFix

我在 Google App Engine Standard 上有一个 Python 3 应用程序。

我正在使用 request.remote_addr 获取用户的 IP 地址,它总是 returning 127.0.0.1。

然后我像这样添加了 werkzeug ProxyFix:

from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

我也在使用其他中间件来启用云 ndb:

app.wsgi_app = ndb_wsgi_middleware(app.wsgi_app)

现在 request.remote_addr 总是 returns 169.254.1.1 这是一个 link-local IP 地址。

有没有办法修复 ProxyFix 以使 Flask 获得 return 正确的 IP 地址?

X-Forwarded-For header 确实有正确的 IP 地址,但我想在 request.remote_addr.

中获取此 IP 地址
  1. 是否有可能 request.remote_addr 给你 127.0.0.1 因为你在你的开发环境 (LAN) 上?

  2. 这没有回答您的问题 - 但您是否有特定原因要使用 request.remote_addr 而不是 X-Forwarded-For?

您可以使用以下选项之一,尝试两个选项,看看哪个适合您:

user_ip = request.headers.getlist("X-Forwarded-For")[0]
user_ip_2 = request.headers['x-appengine-user-ip']

App Engine 似乎有两个代理。不知道第二个是什么(一个用于负载均衡器)。

解决方案是告诉 ProxyFix 信任两个代理,您可以这样做:

app.wsgi_app = ProxyFix(app.wsgi_app, x_for=2)