Python使用Django获取用户真实IP的方法

小林子
小林子
发布时间:2026-10-12| 3人浏览过
原创

在基于Nginx反向代理的Django项目中,直接读取 request.META 往往无法获取真实的客户端IP。本文说明该问题的成因,提供修复Nginx配置的具体参数,并给出完整的Python函数实现步骤。

Django 获取客户端 IP 的标准实现

在Django视图或工具类中,通常优先从 HTTP 请求头获取经代理转发的IP,若无相关头则回退到 TCP 连接地址。以下是修正缩进并增强容错的基础函数:

def get_client_ip(request):
    try:
        real_ip = request.META['HTTP_X_FORWARDED_FOR']
        regip = real_ip.split(",")[0]
    except KeyError:
        regip = ""
    
    if not regip:
        try:
            regip = request.META['REMOTE_ADDR']
        except KeyError:
            regip = ""
            
    return regip

解决 Nginx 代理后 REMOTE_ADDR 缺失的问题

当架构采用 Nginx 作为反向代理时,Nginx 默认会将后端服务看到的连接地址替换为自身的上游IP,导致 request.META 中的 HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 为空。需在 Nginx 配置中进行地址透传设置。

第1步:备份当前 Nginx 配置文件

操作前务必备份原配置,防止语法错误导致服务中断。

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

第2步:在配置块中注入地址变量

根据实际部署的反向代理方式,找到对应的 location 或 server 区块,加入以下指令之一:

适用于 FastCGI 环境:

fastcgi_param REMOTE_ADDR $remote_addr;

适用于 uWSGI 或 Gunicorn 环境:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

修改完成后,检查配置语法并平滑重载服务以使参数生效。

nginx -t && nginx -s reload

完成判断与排错建议

配置生效后可通过临时调试接口打印 request.META.keys(),确认输出结果中包含 REMOTE_ADDR 或 HTTP_X_FORWARDED_FOR。若字段仍不存在,请检查云厂商负载均衡层是否在更早阶段清除了转发头。涉及覆盖或修改服务器配置的操作存在业务中断风险,请在维护窗口期执行,并提前准备回滚脚本。

以上就是 Python 使用 Django 获取用户真实 IP 地址的详细方法和 Nginx 修复步骤,更多关于 Web 开发与反向代理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。