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