django获取客户端真实IP

来源:转载

1settings.py中添加中间件:


'django.middleware.http.SetRemoteAddrFromForwardedFor'


如何没有 自己写这个中间件:


classSetRemoteAddrFromForwardedFor(object):
defprocess_request(self,
request):
try:
real_ip=request.META['HTTP_X_FORWARDED_FOR']
exceptKeyError:
pass
else:
#
HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
#
Take just the first one.
real_ip=real_ip.split(",")[0]
request.META['REMOTE_ADDR']=real_ip

引入中间件:


‘your_project.http.SetRemoteAddrFromForwardedFor’,

原因:


高流量的站点通常需要将Django部署在负载平衡proxy(参见第20章)之后。
这种方式将带来一些复杂性,其一就是每个request中的远程IP地址(request.META["REMOTE_IP"])将指向该负载平衡proxy,
而不是发起这个request的实际IP。
负载平衡proxy处理这个问题的方法在特殊的 X-Forwarded-For 中设置实际发起请求的IP。
因此,需要一个中间件来确保运行在proxy之后的站点也能在request.META['REMOTE_ADDR']中得到正确的IP。

分享给朋友:
您可能感兴趣的文章:
随机阅读: