我需要做一个基本的洪水控制,没有什么非常复杂的。如果他们在短时间内请求太多次,我想获得源IP并延迟答案。 我看到有一个req.ip字段,还有一个包:https://www.npmjs.com/package/request-ip
有什么区别?
答案 0 :(得分:1)
我建议您使用request-ip
模块,因为它会在请求中查找特定的标头,如果它们不存在则会回退到某些默认值。
以下是用于从请求中确定用户IP的顺序。
X-Client-IP
X-Forwarded-For
标头可以以下列格式返回多个IP地址:“客户端IP,代理1 IP,代理2 IP”,因此我们采用第一个。X-Real-IP
(nginx proxy / FastCGI)X-Cluster-Client-IP
(Rackspace LB,Riverbed Stingray)X-Forwarded
,Forwarded-For
和Forwarded
req.connection.remoteAddress
req.socket.remoteAddress
req.connection.socket.remoteAddress
req.info.remoteAddress
它允许获取真实的客户端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是最下游的。