对于flask框架
要获取请求客户端的ip地址,可以通过如下代码实现:
from flask import request
# 获取客户端的ip地址
request.remote_addr
然而,如果后端采用nginx
代理后(不采用flask内置的wsgi服务器,性能差),上述代码却不能获取到客户端的真实ip地址,往往获取的ip地址固定的为127.0.0.1
,如何才能获取真实的ip地址,可以通过以下两步实现。
- 在 nginx的配置中添加以下自定义请求头
proxy_set_header X-Client_Real_Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
二选一就行, X-Client_Real_Ip
可以修改成自己的喜欢名字,$remote_addr
为固定值,不可修改。
- 在flask后端可以通过以下代码实现获取客户端的真实ip地址
def get_login_real_ip():
'''获取用户登录的地址'''
from flask import request
if request.headers.get('X-Forwarded-For'):
ip_address = request.headers.get('X-Forwarded-For')
elif request.headers.get('X-Client_Real_Ip'):
ip_address = request.headers.get('X-Client_Real_Ip')
else:
ip_address = request.remote_addr
print(f'login ip_address={ip_address}')
return ip_address
so easy 🎉🎉🎉