對(duì)于flask框架
要獲取請(qǐng)求客戶端的ip地址,可以通過(guò)如下代碼實(shí)現(xiàn):
from flask import request
# 獲取客戶端的ip地址
request.remote_addr
然而拔创,如果后端采用nginx
代理后(不采用flask內(nèi)置的wsgi服務(wù)器,性能差)富蓄,上述代碼卻不能獲取到客戶端的真實(shí)ip地址剩燥,往往獲取的ip地址固定的為127.0.0.1
,如何才能獲取真實(shí)的ip地址立倍,可以通過(guò)以下兩步實(shí)現(xiàn)灭红。
- 在 nginx的配置中添加以下自定義請(qǐng)求頭
proxy_set_header X-Client_Real_Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
二選一就行, X-Client_Real_Ip
可以修改成自己的喜歡名字,$remote_addr
為固定值口注,不可修改变擒。
- 在flask后端可以通過(guò)以下代碼實(shí)現(xiàn)獲取客戶端的真實(shí)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 ??????