获取客户端IP地址的最佳方法是req.ip或req.connection.remoteAddress?

时间:2016-07-27 19:46:44

标签: node.js express

我想知道从我的快递应用程序获取客户端IP地址的最佳方法是什么,因为SOF和文档显示req.ip& req.connection.remoteAddress。不确定区别是什么,哪个是我应该使用的。

2 个答案:

答案 0 :(得分:6)

req.ip将尝试解析实际的客户端IP地址,同时考虑代理服务器设置的标头,指示请求的来源(客户端)(尽管这只会在{{{ 3}}设置已明确启用)。

req.connection.remoteAddress将包含发出请求的客户端的IP地址,如果代理服务器将是代理服务器的IP地址,而不是代表其的客户端的IP地址代理正在转发请求。

如果您正在使用向Express服务器转发请求的反向代理,则req.ip和启用trust proxy是最佳解决方案。否则,只有普通req.ip仍然可以。

答案 1 :(得分:3)

获取用户IP的最佳方式是req.headers['x-forwarded-for'] || req.connection.remoteAddress;

喜欢这个var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

因为出于安全考虑,您可能会使用中间件(或最常用的代理)服务器(如Cloudflare),如果您使用req.connection.remoteAddress,它会每次都发送您的中间件服务器IP地址,但您可以使用x-转发标头和req.connection.remoteAddressreq.ip在一起。

了解有关x-forwarded-for http header

的更多信息

修改

如以下评论中所述,使用req.ip || req.connection.remoteAddress的最佳做法;因为即使您使用不带代理的应用程序,将来也可以将它与代理一起使用,并且使用上述方法,您可以使用您的应用程序而无需更改它。