如何获取客户端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://idctop.com/article/487174.html

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

相关推荐

  • 青岛外贸独立站为什么总被CC攻击?

    青岛外贸独立站频繁遭遇CC攻击,根源在于其业务特性与攻击成本的不对等,以及防护意识的普遍缺失,青岛外贸独立站被CC攻击原因分析业务暴露面大,攻击路径清晰青岛作为外贸重镇,独立站通常面向海外客户,服务器IP和域名公开可查,攻击者只需扫描公开的站点列表,就能锁定目标,相比国内站,外贸站往往使用开源CMS或定制化建站……

    2026年8月12日
    800
  • ajax.js文件怎么用?ajax.js文件报错怎么解决

    ajax.js 并非一个标准的官方库文件,而是开发者在项目中封装的用于处理异步 HTTP 请求的工具模块,其核心价值在于通过局部刷新技术提升用户体验并降低服务器负载,在 2026 年的前端开发语境下,虽然 Fetch API 和 Axios 占据了主流市场,但许多遗留系统、特定框架底层或轻量级项目中依然广泛存在……

    2026年6月8日
    3800
  • 电脑无法安装SQL数据库服务器失败如何解决,安装失败原因详解?

    SQL数据库服务器安装失败,绝大多数是系统环境、权限或组件冲突导致,通过系统化排查可以解决,电脑无法安装sql数据库服务器失败原因清单安装失败的原因五花八门,但归纳起来也就那几个核心点,你对照自己的情况,逐项检查,比漫无目的地重试要高效得多,系统环境不满足最低要求SQL Server 对操作系统版本、处理器、内……

    2026年8月19日
    1100
  • AIoT论坛直播在哪看?AIoT论坛直播观看入口

    AIoT论坛直播已成为企业获取前沿技术洞察、实现产业链精准对接的高效枢纽,其核心价值在于打破了传统线下交流的时空壁垒,通过实时互动与专业内容的深度分发,加速了人工智能与物联网技术的融合落地,在数字化转型的关键期,高质量的直播内容不仅是行业知识的集散地,更是企业构建品牌权威、抢占市场认知的战略高地,重塑行业连接……

    2026年3月21日
    10600
  • AIoT深水区是什么意思,AIoT深水区发展趋势分析

    AIoT产业已正式告别“连接为王”的粗放增长阶段,全面迈入以“价值落地”为标志的深水区,在这个新阶段,单纯追求设备联网数量已失去意义,能否打通数据孤岛、实现场景化智能闭环,成为决定企业生死的关键分水岭,企业必须从单纯的硬件销售商转型为系统级服务提供商,通过边缘计算与AI算法的深度融合,解决行业碎片化痛点,才能构……

    2026年3月11日
    11800
  • AI换脸限时特惠!立即抢购优惠 – AI换脸怎么使用? | AI换脸软件

    AI换脸限时特惠:把握技术红利,赋能专业场景直击:本次AI换脸技术限时特惠活动,面向企业级用户与专业创作者开放,提供高性能、高安全性的深度伪造解决方案,旨在降低先进技术应用门槛,推动影视制作、广告营销、虚拟人开发等领域的创新效率,优惠涵盖核心算法调用、定制化训练服务及安全审计支持,活动期内最高降幅达30……

    2026年2月15日
    16400
  • 广西云服务器哪里买好?2026年最新配置价格对比

    在广西购买云服务器,建议优先选择拥有本地数据中心或低延迟节点的主流云服务商(如阿里云、腾讯云、华为云),并根据业务对数据合规性及本地化服务的需求,在“广西云服务器价格”与“高性能实例”之间做出平衡选择,选择云服务器不再仅仅是挑选一台远程电脑,而是为数字业务构建地基,对于广西地区的中小企业、跨境电商从业者以及本地……

    2026年5月29日
    4100
  • 搬瓦工圣何塞CN2 GIA VPS好用吗,搬瓦工圣何塞CN2 GIA VPS评测

    搬瓦工圣何塞CN2 GIA VPS以$49.99/季的极致性价比,结合2.5Gbps带宽与1T月流量,是目前解决国内访问延迟高、丢包严重问题的最优解之一,在服务器租赁市场,”便宜”与”稳定”往往难以兼得,搬瓦工(BandwagonHost)作为老牌IDC服务商,其圣何塞节点(USCA_SJC5)凭借CN2 GI……

    2026年6月30日
    1100
  • 如何快速将ftp文件上传到服务器上?ftp上传文件速度慢怎么解决

    通过FTP上传文件到服务器,核心在于使用支持SFTP或FTPS的安全协议,配合FileZilla等客户端工具,建立加密连接后直接拖拽文件至指定目录,这是目前中小型企业和个人开发者最主流且高效的部署方式,为什么FTP仍是文件传输的刚需选择在云原生和容器化技术大行其道的今天,很多人会质疑传统文件传输协议的生存空间……

    2026年7月11日
    6300
  • 服务器如何防御DDoS攻击,DDoS攻击防护方案有哪些?

    服务器 DDoS 防御全攻略DDoS(分布式拒绝服务攻击)通过利用大量受控的傀儡网络(僵尸网络)向目标服务器发送海量请求,旨在耗尽服务器的带宽、CPU、内存或连接数,导致正常用户无法访问,有效的防御需要构建多层次、立体化的防护体系,常见的 DDoS 攻击类型了解攻击手段是防御的前提,攻击通常分为以下三个维度:流……

    2026年7月14日
    800

发表回复

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