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

guy*_*bro 4 node.js express

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

rob*_*lep 8

req.ip将尝试解决实际的客户端IP地址,同时考虑由代理服务器设置的标头,指示请求的来源(客户端)(尽管只有在trust proxy明确启用该设置时才会这样做).

req.connection.remoteAddress 将包含发出请求的客户端的IP地址,在代理服务器的情况下,该代理服务器将是代理的IP地址,而不是代理服务器代表其转发请求的客户端的IP地址.

如果您正在使用将请求转发到Express服务器的反向代理,则req.ip启用trust proxy是最佳解决方案.否则,只是平原req.ip仍然会这样做.


Are*_*yan 5

获取用户 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-forwarded-for 标头req.connection.remoteAddressreq.ip一起使用。

有关x-forwarded-for http 标头的更多信息,请阅读

编辑

正如下面的评论中提到的最佳使用实践req.ip || req.connection.remoteAddress;因为即使您使用没有代理的应用程序,将来您也可以通过代理使用它,并且通过上述方法,您可以在不更改应用程序的情况下使用您的应用程序。