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

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

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

泰拉瑞亚如何流畅的使用IP地址进行联机
加载中
泰拉瑞亚如何流畅的使用IP地址进行联机

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

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

  • 原理:服务器直接从 TCP 连接中获取对端(客户端)的 IP 地址。
  • 代码示例
    • Java (Servlet): request.getRemoteAddr()
    • Python (Flask): request.remote_addr
    • Node.js (Express): req.ipreq.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-ForX-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-IPX-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

相关推荐

  • ios开发xmpp如何实现?ios开发xmpp教程详解

    iOS平台下实现XMPP即时通讯的核心在于构建一个稳定、异步的连接管理机制,并以此为基础处理复杂的XML流数据解析与状态同步,开发者在进行iOS开发xmpp相关项目时,必须优先确立基于Delegate(代理模式)的异步回调架构,避免阻塞主线程,同时利用XMPPFramework框架强大的扩展模块来减少重复造轮子……

    2026年3月3日
    14300
  • dpdk开发怎么做,dpdk开发就业前景如何

    DPDK 开发通过内核旁路技术彻底解决了传统网络数据包处理的高延迟与低吞吐瓶颈,是实现高性能网络应用的核心技术路径,在云计算、边缘计算及高频交易等场景下,数据面处理能力直接决定了业务的上限,而 DPDK 通过独占 CPU 资源、轮询模式驱动(PMD)以及巨大的页表内存管理,将数据包处理性能提升至线速级别,是构建……

    2026年3月18日
    11600
  • ios即时通讯开发难吗?ios即时通讯开发教程

    iOS即时通讯开发的核心在于构建一个高并发、低延迟且极度重视用户隐私保护的长连接系统,开发团队必须优先解决弱网环境下的连接稳定性与数据一致性难题,而非仅仅实现基础的消息收发功能,成功的iOS即时通讯应用,底层架构必须具备极强的抗干扰能力,能够应对复杂的移动网络环境,同时在前端交互上达到毫秒级响应,这要求开发者在……

    2026年3月25日
    8500
  • Win10局域网游戏连接服务器失败?,怎么解决

    解决Win10局域网游戏连接服务器失败的核心思路是从防火墙、网络发现和系统服务三个方向入手,关闭防火墙测试、启用网络发现、启动相关服务后,绝大多数情况都能恢复正常,Win10局域网游戏连接服务器失败原因分析局域网联机失败的原因通常集中在几个方面,逐一排查即可,防火墙与安全软件拦截Windows Defender……

    2026年7月25日
    1700
  • freecdn的安装配置复杂吗,有哪些注意事项?

    对于流量不大但希望提升静态资源加载速度的网站,freecdn是唯一能零成本实现多源故障转移的前端加速方案,freecdn配置步骤详解原理简述与适用资源freecdn利用Service Worker在浏览器后台拦截静态资源请求,从预设的多个CDN源中自动选择可用且延迟最低的版本返回,它主要优化JS、CSS、字体等……

    2026年7月15日
    700
  • VMISS限时7折3.5加元起值得买吗?香港美国服务器CN2 GIA对比

    VMISS目前推出限时7折优惠,低至3.5加元(约18.4元人民币)起,支持香港、韩国、日本及美国节点,并配备CN2 GIA、9929、CMIN2等优质线路,是追求低延迟与高稳定性的用户极具性价比的选择,在服务器租赁市场,价格波动与线路质量往往是用户决策的核心矛盾,VMISS此次促销活动直击痛点,不仅将入门门槛……

    2026年6月30日
    1900
  • 服务器cpu内存比例多少合适,服务器cpu内存配置推荐

    服务器 CPU 与内存的配比并非固定公式,而是取决于业务负载特征,对于高并发 Web 服务,推荐 1:2 至 1:4 的内存与 CPU 核心比;对于数据库或计算密集型任务,则需提升至 1:8 甚至更高,盲目追求高配 CPU 而忽视内存,或过度堆砌内存导致 CPU 闲置,均会导致资源浪费或性能瓶颈,最优解在于根据……

    程序开发 2026年4月19日
    4400
  • AI剪辑新年活动有哪些优惠,AI剪辑软件怎么免费领会员

    生态中,利用AI技术进行视频创作已成为抢占节日流量的核心策略,对于创作者和企业而言,通过AI剪辑新年活动内容,不仅能实现内容的批量生产与高效分发,更能以极低的成本打造出具有视觉冲击力和节日氛围的高质量视频,这种模式将内容生产的效率提升了数倍,同时保证了创意的多样性与专业性,是新年营销季实现流量爆发与用户转化的最……

    2026年2月26日
    12800
  • Excel如何备份重要数据?,自动备份怎么设置

    Excel备份最可靠的做法是同时开启自动恢复并定期手动另存副本,自动保存不等于备份,很多用户因为找不到自动恢复文件而丢失数据,根源在于没理解备份机制,以下从设置、恢复到方案选择,帮你彻底解决Excel备份问题,Excel自动备份在哪里设置?这是最常被问的问题,Excel自动备份实际指的是自动恢复功能,它会在文件……

    2026年7月20日
    1100
  • ioZoom美国VPS怎么样?8美元月付实测性能揭秘

    在众多海外服务器提供商中,ioZoom凭借其专注的KVM架构和直连网络线路,在建站及外贸领域积累了较高的关注度,本文针对ioZoom旗下美国VPS基础套餐(8美元/月)进行深度实测,从硬件性能、网络质量、磁盘IO到真实建站体验进行全面剖析,并结合2026年最新优惠活动给出选购建议, 测试环境与基础配置本次实测机……

    2026年4月27日
    4400

发表回复

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