我想知道从我的快递应用程序获取客户端IP地址的最佳方法是什么,因为SOF和文档显示req.ip
& req.connection.remoteAddress
。不确定区别是什么,哪个是我应该使用的。
答案 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.remoteAddress
或req.ip
在一起。
了解有关x-forwarded-for http header
的更多信息修改强>
如以下评论中所述,使用req.ip || req.connection.remoteAddress
的最佳做法;因为即使您使用不带代理的应用程序,将来也可以将它与代理一起使用,并且使用上述方法,您可以使用您的应用程序而无需更改它。