Nginx+Django的Xadmin操作日志IP记录问题

用了Nginx反代后,在Django中用Xadmin进行操作后,日志记录中的IP总是本地IP:127.0.0.1

因为xadmin代码中使用了request.META.get('REMOTE_ADDR')直接获取IP,这样是获取到的是代理的IP,也就是本机IP

要显示真实IP,先要设置Nginx,

            proxy_set_header REMOTE_ADDR $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            real_ip_recursive on;

定义获取代理真实IP的函数

def get_client_ip(request):

    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

    if x_forwarded_for:

        ip = x_forwarded_for.split(',')[-1].strip()

    else:

        ip = request.META.get('REMOTE_ADDR')

    return ip

然后修改xadmin代码views/base.py

找到 class BaseAdminObject 下的Log函数,修改成下面这样,注意要自己引用一个刚才定义的那个函数

log = Log(

            user=self.user,

            # ip_addr=self.request.META['REMOTE_ADDR'],  #这是原来的

            ip_addr=get_client_ip(self.request),  #这是修改后的

            action_flag=flag,

            message=message

        )

修改后就可以获取到真实IP了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容