前端/移动开发面试题更新 2026-08-05

在 Node.js 服务端开发中,有哪些方法可以用来获取发起请求的客户端的真实 IP 地址?请说明不同部署场景下的实现方式和注意事项。

前端/移动开发风险判断技术原理NginxNode.js

考察说明

考查对 Node.js 获取客户端真实 IP 的常见方法及反代场景下 X-Forwarded-For 头处理的理解。

回答思路

  1. 【回答框架 1】直接连接时,通过 socket.remoteAddress 或 request.connection.remoteAddress 可获取客户端 IP;在 HTTP 请求对象中,req.socket.remoteAddress 是标准方式。
  2. 【回答框架 2】经过反向代理(如 Nginx)时,需解析 X-Forwarded-For 头,取最左侧未被信任代理追加的 IP。常见做法是读取 req.headers['x-forwarded-for'],按逗号分割取第一个非私有 IP。
  3. 【回答框架 3】可以使用第三方库如 request-ip 或 express-rate-limit 的 getIp 方法,内部处理多种请求头(如 X-Real-IP、X-Client-IP)和代理情况,提高健壮性。
  4. 【回答框架 4】需注意代理转发时可能伪造 X-Forwarded-For,应只信任来自可信代理的请求,或在应用外层(如 Nginx)配置真实客户端 IP 传递,并禁用客户端直接访问应用。
  5. 【回答框架 5】若应用部署在负载均衡或云服务(如阿里云 SLB、AWS ELB)后,需根据平台提供的特定头(如 X-Real-IP、X-Forwarded-For)和信任代理设置来获取真实 IP。
  6. 【关键点 1】直接获取用 socket.remoteAddress。
  7. 【关键点 2】反代后用 X-Forwarded-For 并取正确 IP。
  8. 【关键点 3】优先考虑使用成熟库处理多请求头。
  9. 【关键点 4】必须信任代理并防止伪造头。
  10. 【易错点 1】不校验 X-Forwarded-For 头时可能被客户端伪造 IP。
  11. 【易错点 2】误将代理 IP 当作真实 IP。
  12. 【易错点 3】依赖单一请求头而忽略平台差异。