如何获取客户端IP?服务器获取客户端ip的方式

在 Web 开发中,服务器获取客户端真实 IP 地址是一个常见但容易出错的需求,由于网络架构的复杂性(如反向代理、负载均衡、NAT 等),直接获取 IP 并不总是直接的。

以下是几种主要的方式、原理、优缺点及最佳实践:

泰拉瑞亚如何流畅的使用IP地址进行联机
加载中
泰拉瑞亚如何流畅的使用IP地址进行联机
苏
苏拉哦
53.8万--
原视频地址

直接获取连接 IP(最基础方式)

这是最原始的方式,适用于没有反向代理或负载均衡的简单架构。

  • 原理:服务器直接从 TCP 连接中获取对端(客户端)的 IP 地址。
  • 代码示例:
    • Java (Servlet): request.getRemoteAddr()
    • Python (Flask): request.remote_addr
    • Node.js (Express): req.ip 或 req.connection.remoteAddress
    • Go: req.RemoteAddr
  • 优点:简单、直接、性能高。
  • 缺点:
    • 如果客户端位于 NAT(网络地址转换)后面(如家庭宽带、公司内网),获取到的是网关出口 IP,而非用户真实 IP。
    • 如果前面有 Nginx、HAProxy、Cloudflare 等反向代理,获取到的是代理服务器的 IP,而非最终用户的 IP。

通过 HTTP 头信息获取(常见于代理场景)

当请求经过反向代理(如 Nginx、Apache、CDN、云厂商负载均衡)时,代理服务器通常会将原始客户端 IP 附加在 HTTP 请求头中。

常用 Header 字段:

如何获取客户端IP?服务器获取客户端ip的方式

Header 名称 说明 安全性/可靠性
X-Forwarded-For (XFF) 最常用,格式:client, proxy1, proxy2,第一个 IP 通常是原始客户端 IP。 ⚠️ 不可信:客户端可伪造此头。
X-Real-IP Nginx 常用,通常只包含一个 IP 值。 ⚠️ 不可信:客户端可伪造。
CF-Connecting-IP Cloudflare 专用。 ✅ 可信:由 Cloudflare 设置,客户端无法伪造。
True-Client-IP Akamai 等 CDN 使用。 ✅ 可信:由 CDN 设置。
X-Forwarded-Proto 记录原始协议(http/https),非 IP,但常配合使用。

获取逻辑(伪代码):

def get_client_ip(request):
    # 1. 优先检查可信 CDN 提供的专用头
    if request.headers.get('CF-Connecting-IP'):
        return request.headers['CF-Connecting-IP']
    # 2. 检查 X-Forwarded-For
    xff = request.headers.get('X-Forwarded-For')
    if xff:
        # XFF 格式: "client, proxy1, proxy2"
        # 取第一个 IP
        return xff.split(',')[0].strip()
    # 3. 检查 X-Real-IP
    if request.headers.get('X-Real-IP'):
        return request.headers['X-Real-IP']
    # 4. 降级到直接连接 IP
    return request.remote_addr

⚠️ 重要安全警告:

  • X-Forwarded-For 和 X-Real-IP 可以被客户端伪造!
    • 如果用户手动修改 HTTP 请求头,可以设置 X-Forwarded-For: 127.0.0.1 来欺骗服务器。
    • 解决方案:在反向代理(如 Nginx)中配置,只信任内部代理服务器传来的 XFF 头,丢弃来自外部客户端的伪造头。

通过反向代理配置(Nginx 示例)

为了正确传递真实 IP,必须在反向代理层进行配置。

Nginx 配置示例:

如何获取客户端IP?服务器获取客户端ip的方式

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_server;
        # 传递真实 IP 给后端
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;       # 将客户端 IP 放入 X-Real-IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 追加 IP 到 XFF
    }
}

后端信任代理配置(关键!):

后端应用需要知道哪些 IP 是“可信代理”,否则可能被伪造攻击。

  • Nginx + Gunicorn: 使用 gunicorn 的 --forwarded-allow-ips 参数。
  • Node.js (Express): 设置 trust proxy。
    app.set('trust proxy', true); // 或指定具体 IP 列表
  • Java (Spring Boot): 在 application.yml 中配置。
    server:
    tomcat:
      remoteip:
        remote-ip-header: x-forwarded-for
        protocol-header: x-forwarded-proto

使用云厂商或 CDN 提供的专用 API/Header

如果使用 AWS ALB、Cloudflare、简米云 SLB 等云服务,它们通常会提供不可伪造的 IP 信息。

如何获取客户端IP?服务器获取客户端ip的方式

服务商 推荐 Header 说明
Cloudflare CF-Connecting-IP 最可靠,客户端无法伪造。
AWS ALB X-Forwarded-For AWS 保证不会由客户端伪造。
简米云 SLB X-Forwarded-For 简米云保证可信。
Azure X-Forwarded-For 在 App Service 中需配置 X-Forwarded-For 支持。

✅ 最佳实践:优先使用云服务商提供的专用 Header(如 CF-Connecting-IP),其次才是通用的 X-Forwarded-For。


总结与最佳实践建议

场景 推荐方式 注意事项
无代理直连 request.getRemoteAddr() 简单直接。
自建 Nginx 代理 读取 X-Real-IP 或 X-Forwarded-For 必须在 Nginx 中配置 proxy_set_header,并在后端信任代理 IP。
使用 Cloudflare 读取 CF-Connecting-IP 最安全,无需担心伪造。
使用 AWS/Azure/简米云 读取 X-Forwarded-For 云厂商保证该头可信。
高安全要求 结合 IP 白名单 + 日志审计 不要仅依赖 IP 做权限控制,应结合其他认证机制。

🛡️ 安全建议

  1. 永远不要完全信任 X-Forwarded-For:除非你确认请求来自可信的代理服务器。
  2. 配置信任代理列表:在后端框架中明确指定哪些 IP 是“可信代理”,这样框架会自动忽略来自非代理 IP 的伪造 XFF 头。
  3. 日志记录:记录原始连接 IP 和解析后的用户 IP,便于审计和故障排查。
  4. 防刷策略:如果用于频率限制(Rate Limiting),建议使用 X-Forwarded-For 的第一个 IP,但需确保代理层已正确清理伪造头。

通过以上方式,你可以准确、安全地获取客户端真实 IP。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/487174.html

赞 (0)
jquery百度cdn在哪里,jquery引用百度cdn
上一篇 2026年7月12日 13:58
火数云618云服务器21元起值得买吗,200G高防服务器哪家稳定
下一篇 2026年7月12日 14:01

相关推荐

  • Excel中边距怎么设置?Excel表格页边距调整方法

    在Excel中调整边距并非直接修改页面设置中的数值,而是通过“打印标题”中的“水平/垂直居中”选项或手动调整行高列宽来实现视觉上的居中效果,因为Excel本身没有传统Word那样的页边距输入框,很多用户在使用Excel进行报表打印时,都会遇到一个令人头疼的问题:明明数据填满了单元格,打印出来却偏左或偏上,四周留……

    2026年7月7日
    6300
  • 赛灵思开发板,为何如此受到开发者青睐?性能与功能揭秘!

    赛灵思开发板(尤其是基于FPGA和自适应SoC的型号,如Zynq-7000、Zynq UltraScale+ MPSoC、Versal ACAP系列)是进行高性能计算、硬件加速、实时处理、通信系统原型设计和学习的强大平台,掌握在其上进行程序开发的核心流程是释放其潜力的关键,本教程将引导您完成从环境搭建到基础应用……

    2026年2月6日
    13230
  • 开发成本开发产品,开发产品需要多少钱,开发成本怎么算

    开发成本开发产品是决定项目生死的关键变量,成功的成本控制并非单纯压缩预算,而是通过精准的需求规划与科学的架构设计,实现投入产出比的最大化,在数字化竞争激烈的当下,盲目追求功能堆砌或过度设计往往导致资源浪费,唯有将开发成本开发产品的管控前置,建立“价值导向”的研发体系,才能在保证产品质量的前提下,显著缩短上市周期……

    程序开发 2026年4月19日
    6600
  • JusthostVPS美国11.4元月性能怎么样?JusthostVPS美国测评

    Justhost作为俄罗斯知名的主机商,其美国机房的VPS产品因极具竞争力的价格一直备受建站用户关注,本次针对其美国机房月付11.4元套餐进行了为期72小时的深度实测,从硬件性能、网络质量、磁盘IO到真实建站体验进行全方位解析,并整理了2026年最新活动优惠信息,为选购提供可靠的数据参考, 套餐概览与2026年……

    2026年4月29日
    4900
  • 服务器aclcwinsock是什么,aclcwinsock报错怎么解决

    服务器网络通信异常的核心症结往往指向底层协议栈配置错误,Winsock 层级的 ACL 策略冲突是导致连接超时或拒绝访问的常见原因, 当服务器无法建立预期的 TCP/UDP 连接,且常规防火墙规则排查无效时,必须深入检查 服务器 aclcwinsock 相关的底层过滤机制,该机制并非独立的软件,而是操作系统网络……

    程序开发 2026年4月19日
    5100
  • CMIVPS九折优惠码怎么领?香港CN2线路VPS推荐

    CMIVPS近期推出限时优惠,香港CN2 GIA线路低至$2/月,西雅图斯巴达同款VPS季度仅需$16,配合最新九折码可进一步降低成本,适合追求低延迟与高稳定性的建站及开发用户,在云服务器市场波动加剧的当下,寻找高性价比且网络质量稳定的VPS服务商成为许多技术爱好者的核心诉求,CMIVPS作为近年来在独立开发者……

    2026年6月30日
    1700
  • SEO开发怎么做,SEO工具开发教程

    SEO的开发:构建搜索引擎友好的技术基石核心观点:成功的SEO始于开发阶段,技术架构、代码质量、网站性能与结构化数据是搜索引擎理解、抓取和排名网站的基础,忽视开发环节的SEO优化,将使后续内容与推广事倍功半,技术架构:搜索引擎的抓取地基服务器与响应: 确保服务器稳定高速(TTFB < 200ms),使用H……

    2026年2月16日
    22500
  • ak网关是什么?ak网关配置教程

    AK网关通过智能流量调度与多层安全防护,能有效解决高并发场景下的系统稳定性问题,是构建现代微服务架构的关键基础设施,在数字化转型的深水区,企业面临的挑战早已不是“有没有系统”,而是“系统稳不稳”,当双11大促流量洪峰来袭,或者核心业务突发异常时,AK网关就像一位经验丰富的交通警察,不仅指挥着成千上万的数据车辆有……

    2026年6月4日
    4700
  • 如何从Excel中提取电话?,提取电话的方法有哪些

    从Excel中提取电话号码,最直接的方法是结合MID、FIND、TRIM等文本函数进行规则截取,或者利用Excel 365/2021的TEXTJOIN配合数组运算实现精准筛选;如果数据量较大或格式复杂,Power Query的正则替换功能才是真正的高效方案,Excel提取电话号码公式:这三招最管用提取电话的核心……

    2026年7月16日
    2400
  • 公司电脑突然连不上网怎么办?网络故障排查方法

    公司电脑网络连不上网在现代企业办公环境中,网络稳定性是业务连续性的基石,当“公司电脑网络连不上网”这一故障发生时,往往意味着内部局域网、外部宽带接入或核心网络设备出现了异常,对于企业IT管理者而言,快速定位故障源并恢复网络连通性至关重要,许多企业在面对网络中断时,往往陷入盲目重启或频繁更换服务商的困境,本文旨在……

    2026年6月28日
    2000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注