Jos*_*eph 1 python flask docker
我有一个在 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"
Run Code Online (Sandbox Code Playgroud)
这是使用 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)
Run Code Online (Sandbox Code Playgroud)
我知道 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4161 次 |
| 最近记录: |