我有一个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)
-
是否可以请求。remote_addr给你127.0.0.1是因为你在你的开发环境(局域网)?
-
这并没有回答你的问题——但是你想要使用request的具体原因是什么?remote_addr代替X-Forwarded-For?
您可以使用以下选项之一,尝试两个选项,看看哪个适合您:
user_ip = request.headers.getlist("X-Forwarded-For")[0]
user_ip_2 = request.headers['x-appengine-user-ip']