Docker获得用户的真实IP

时间:2017-07-22 23:17:33

标签: python docker flask

我有一个在docker容器内运行的Flask网站。我想向用户显示用户的IP地址,但是它当前显示的是docker容器的IP地址,可能是因为它是从docker转发的。 我使用Flask的requests模块检索IP地址。

它不应该有所作为,但我使用的是docker-compose。

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

这是使用Flask的网站代码:

from flask import Flask, request
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Your IP is: {0}. I have been visited {1} times and \'foo\' is set to {2}.\n'.format(request.remote_addr,count, redis.get('foo').decode('utf-8'))

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

我知道Nginx会在转发之前向请求提供带有ip地址的标头,您可以使用它。 Docker是否有类似我可以使用的东西,或者是否有另一种方法。 Get IP address of visitors using Python + Flask

当前行为示例:example

谢谢。

1 个答案:

答案 0 :(得分:4)

我不同意这些评论。根据您可以控制的部署程度,这是可行的。你应该在NGINX配置中添加如下内容:

      location / {
          proxy_pass  http://web;
          proxy_set_header   Connection "";
          proxy_http_version 1.1;
          proxy_set_header        Host            $host;
          proxy_set_header        X-Real-IP       $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      }