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。