是否值得为express.js app而不是req.ip使用request-ip包

时间:2016-04-22 17:36:26

标签: node.js express flooding

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

有什么区别?

1 个答案:

答案 0 :(得分:1)

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

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

  1. X-Client-IP
  2. X-Forwarded-For标头可以以下列格式返回多个IP地址:“客户端IP,代理1 IP,代理2 IP”,因此我们采用第一个。
  3. X-Real-IP(nginx proxy / FastCGI)
  4. X-Cluster-Client-IP(Rackspace LB,Riverbed Stingray)
  5. #2的摘录,例如:X-ForwardedForwarded-ForForwarded
  6. req.connection.remoteAddress
  7. req.socket.remoteAddress
  8. req.connection.socket.remoteAddress
  9. req.info.remoteAddress
  10. 它允许获取真实的客户端IP,无论您的Web服务器配置或代理设置,甚至连接技术(HTTPẀebSocket ...)

    您还可以查看快递req.ips(是的,ip s ,而非req.ip)属性,以获取有关请求的更多信息:

      

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

         

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

         

    例如,如果X-Forwarded-For是客户端,proxy1,proxy2,req.ips将是[“client”,“proxy1”,“proxy2”],其中proxy2是最下游的。