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



我有一个Python 3应用程序在谷歌应用程序引擎标准。

我使用request.remote_addr来获取用户的IP地址,它总是返回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总是返回链路本地IP地址169.254.1.1

是否有办法修复ProxyFix让Flask返回正确的IP地址?

X-Forwarded-For标头确实有正确的IP地址,但我想在request.remote_addr中获得这个IP地址。

看起来应用引擎有两个代理。不知道第二个是什么(一个是负载平衡器)。

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

app.wsgi_app = ProxyFix(app.wsgi_app, x_for=2)
  1. 是否可以请求。remote_addr给你127.0.0.1是因为你在你的开发环境(局域网)?

  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']

最新更新