服务端为了防爬虫或其他用途,需要获取客户端真实 ip,在 flask 中获取客户端 ip 的方法如下:

1
ip = request.remote_addr #写在 view 中

但是通过 nginx 反向代理后,获取的 ip 全部变成了 127.0.0.1。

可以在 nginx 中的配置文件中 location 下块添加一行:

1
2
# 设置请求头,并将头信息传递给服务器端
proxy_set_header X-Real-IP $remote_addr;

然后在 flask 中通过以下代码就能获取真实 ip 了:

1
ip = request.headers['X-Real-IP']

很多类似的教程坑在,只给出一个类似 ip = request.headers['X-Forwarded-For'] 根本不告诉你 headers 的这个 key 是在 nginx 中配置的。