获取IPv4或者IPv6
云厂商,常用真实IP头,备注
阿里云 SLB,X-Forwarded-For 或 X-Real-IP,通常开启 X-Forwarded-For 保留源IP
腾讯云 CLB,X-Forwarded-For,类似阿里云
华为云 ELB,X-Forwarded-For,
百度云 BLB,X-Forwarded-For,
Cloudflare,CF-Connecting-IP,优先级最高
七牛云 CDN,X-Forwarded-For,
又拍云 CDN,X-Forwarded-For / X-Real-IP,
网易云 CDN,X-Real-IP,
def get_real_ip():
# 优先级顺序:Cloudflare > 常见国内真实IP头 > X-Forwarded-For第一个有效IP > remote_addr
if ip := request.headers.get("CF-Connecting-IP"):
return ip
if ip := request.headers.get("X-Real-IP"):
return ip
if forwarded := request.headers.get("X-Forwarded-For"):
# 取第一个非内网IP
for ip in (ip.strip() for ip in forwarded.split(",")):
if ip and not ip.startswith(('10.', '172.16.', '172.17.', '192.168.', '127.', '::1')):
return ip
return forwarded.split(",")[0].strip()
return request.remote_addr