使用带有 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 地址
是否有可能 request.remote_addr 给你 127.0.0.1 因为你在你的开发环境 (LAN) 上?
这没有回答您的问题 - 但您是否有特定原因要使用 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)
我在 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
.
是否有可能 request.remote_addr 给你 127.0.0.1 因为你在你的开发环境 (LAN) 上?
这没有回答您的问题 - 但您是否有特定原因要使用 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)