用Django获取用户IP(包括被NGINX反向代理后的)
2019-04-05 本文已影响0人
程序圆圆圆
用Django获取用户IP(包括被NGINX反向代理后的)
完整的实现在: https://github.com/FatEagle/IP-Django
Django获取一个请求的IP地址是从request.META['REMOTE_ADDR']
中抽取.
但是如果用NGINX等反向代理了Django服务, 则请求的ip是NGINX的ip, 不是用户的真正的IP. 真正的ip需要从request.META['HTTP_X_FORWARDED_FOR']
中抽取
代码如下
def __get_user_ip(request):
try:
request_ip = request.META['REMOTE_ADDR']
except KeyError:
pass
try:
# 反向代理后存储的IP
user_ip = request.META['HTTP_X_FORWARDED_FOR']
except KeyError:
# 局域网请求
user_ip = None
return user_ip or request_ip