0

我需要做一个基本的洪水控制,没有什么很复杂的。如果他们在短时间内请求太多次,我想获取源 IP 并延迟答案。我看到有一个 req.ip 字段,还有一个包:https ://www.npmjs.com/package/request-ip

有什么不同?

4

1 回答 1

1

我建议您使用该request-ip模块,因为它会在请求中查找特定的标头,如果它们不存在则回退到一些默认值。

以下是它用于从请求中确定用户 ip 的顺序。

  1. X-Client-IP
  2. X-Forwarded-Forheader 可能会返回多个 IP 地址,格式为:“client IP, proxy 1 IP, proxy 2 IP”,所以我们取第一个。
  3. X-Real-IP(nginx 代理/FastCGI)
  4. X-Cluster-Client-IP(Rackspace LB,河床黄貂鱼)
  5. #2 的排列,例如X-ForwardedForwarded-ForForwarded
  6. req.connection.remoteAddress
  7. req.socket.remoteAddress
  8. req.connection.socket.remoteAddress
  9. req.info.remoteAddress

无论您的 Web 服务器配置或代理设置如何,甚至连接技术如何(...)HTTP,它都可以获取真实的客户端 IPẀebSocket

您还可以查看 express req.ips(yes, ip s , not req.ip) 属性以获取有关请求的更多信息:

req.ips ( http://expressjs.com/en/api.html )

当信任代理设置未评估为 false 时,此属性包含在 X-Forwarded-For 请求标头中指定的 IP 地址数组。否则,它包含一个空数组。此标头可以由客户端或代理设置。

例如,如果 X-Forwarded-For 是 client,proxy1, proxy2, req.ips 将是 ["client", "proxy1", "proxy2"],其中 proxy2 是最远的下游。

于 2016-04-22T17:54:45.667 回答