【问题标题】:Get IP address on GAE with Flask with ProxyFix使用 Flask 和 ProxyFix 在 GAE 上获取 IP 地址
【发布时间】:2021-05-22 11:48:45
【问题描述】:

我在 Google App Engine Standard 上有一个 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 总是返回 169.254.1.1,这是一个链接本地 IP 地址。

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

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

【问题讨论】:

    标签: python google-app-engine flask proxy middleware


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      1. 是否有可能 request.remote_addr 给了你 127.0.0.1 因为你在你的开发环境 (LAN) 上?

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

      【讨论】:

      • 不,这发生在生产中。只是让代码更简洁。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-15
        • 2014-10-01
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        相关资源
        最近更新 更多