Docker获取用户的真实IP

我有一个Flask网站在Docker容器中运行。 我想显示用户的IP地址给他们,但是它目前显示的是码头集装箱的IP地址,可能是由于它从码头转发。 我使用Flask的requests模块来检索IP地址。

它不应该有所作为,但我使用码头撰写。

 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有什么类似的东西可以使用,或者有另一种方法。 使用Python + Flask获取访问者的IP地址

当前行为示例: 例

谢谢。

我不同意这些意见。 取决于你控制这个部署的多少是可行的。 你应该在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; }