Django 如何获取真实远程客户端IP

问题简述

我们知道HttpRequest.META字典包含所有HTTP头部信息(可用的头部信息取决于客户端和服务器)。一般情况下,HttpRequest.META.get(‘REMOTE_ADDR‘)一句代码就能获取到你想要的客户端IP。然而,如果部署了代理服务器等原因,就会导致得到的IP并不是真实的客户端IP。那么如何才能获取到真实的远程客户端IP呢?

解决方法参考

1.自定义中间件

假如代码文件路径为“custbase.http.SetRemoteAddrFromForwardedFor”。

from django.utils.deprecation import MiddlewareMixin

class SetRemoteAddrFromForwardedFor(MiddlewareMixin):
    """
    如果部署了代理,使用此中间件获取远程客户端IP。
    在settings中注册该中间件。
    """
    def process_request(self, request):
        try:
            real_ip = request.META[‘HTTP_X_FORWARDED_FOR‘]
        except KeyError as err:
            print(err)
        else:
            real_ip = real_ip.split(",")[0]
            request.META[‘REMOTE_ADDR‘] = real_ip

2.注册中间件

在settings.py中注册上述自定义的中间件。

# 中间件
MIDDLEWARE = [
    ...
    ‘custbase.http.SetRemoteAddrFromForwardedFor‘,
]

3.使用

在程序中重新使用字典HttpRequest.META。

...
remote_ip = request.META.get(‘REMOTE_ADDR‘, ‘获取IP失败‘)
...

  至此。转载请注明出处。

原文地址:https://www.cnblogs.com/wcwnina/p/9787222.html

时间: 2024-10-16 02:25:24

Django 如何获取真实远程客户端IP的相关文章

WebService服务端获取访问的客户端IP

WebService服务端获取 访问的客户端IP: @WebService(serviceName = "XXXService", targetNamespace ="http://ws.sms.zjapl.com") public class XXXWebServiceImpl implements XXXWebService { @Resource(name ="org.apache.cxf.jaxws.context.WebServiceContex

ASP.NET获取真正的客户端IP地址的6种方法

Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址,本文将介绍解决方法,需要的朋友可以参考下 在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址. 要想透过代

nginx转发及后端服务器获取真实client的IP

针对nginx的模块介绍可以查阅wiki:http://wiki.nginx.org/Modules 常用模块:HTTP Core Proxy Rewrite Upstream 原理:squid,varnish以及nginx等,在做反向代理的时候,因为要代替客户端去访问服务器,所以,当请求包经过反向代理后,在代理服务器这里这个IP数据包的IP包头做了修改,最终后端web服务器得到的数据包的头部的源IP地址是代理服务器的IP地址,这样一来,后端服务器的程序给予IP的统计功能就没有任何意义,所以在做

php获取真实内网IP方法

function getIP() { if (isset($_SERVER)) { if (isset($_SERVER["HTTP_CDN_SRC_IP"])) { $realip = $_SERVER["HTTP_CDN_SRC_IP"]; } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isse

django中获取访客的ip

1 import os 2 import logging 3 4 class safdView(View): 5 6 def getIPFromDJangoRequest(self, request): 7 logging.basicConfig(filename=os.path.join(os.getcwd(), 'log.txt'), level=logging.DEBUG) 8 if 'HTTP_X_FORWARDED_FOR' in request.META: 9 logging.deb

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

利用nginx反向代理,后端Web如何获取真实客户ip

利用nginx反向代理,后端Web如何获取真实客户端ip 一.nginx反向代理nginx,后端的nginx该如何配置才能获取到客户端的真实IP地址呢. 1.首先需要在nginx代理服务器上的配置文件nginx.conf上的 location 中添加一行参数: proxy_set_header  X-Real-IP  $remote_addr; 重启nginx服务 2.对后面的nginx进行配置 vim /usr/local/nginx/conf/nginx.conf 加入下面参数: set_r

nginx前端代理tomcat取真实客户端IP

使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一个新的Header,用来存储$remote_add,然后再Tomcat获取记录这个值. 新增nginx配置. server { listen 80; server_name www.xxxxx.com; location / { proxy_pass http://IP:8080/; proxy_set_header X-Real-IP $rem

nginx反向代理node.js获取客户端IP

使用Nginx做node.js程序的反向代理,会有这么一个问题:在程序中获取的客户端IP永远是127.0.0.1 如果想要拿到真实的客户端IP改怎么办呢? 一.首先配置Nginx的反向代理 proxy_set_header server { listen 80; server_name chat.luckybing.top; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; pro