关于部署node.js服务到阿里云的坑(下面这四个图,在本机都是通的,但是放到阿里云,127.0.01 和 localhost 都不通;如果用172.16.39.88的动态IP,IP可能会改变)nodejs获取客户端真实ip默认是ipv6格式

 

 

 

分析

虽然获取的这个ipv6的地址,也能使用,可是我想要的只是一个简简单单的ipv4,因为我要提交给别的系统,而不是我自己使用的啊。

搜索

一开始用的是百度,搜了一页居然找不到。哈哈,然后就使用谷歌了。在cnode社区找到原因了。原来从某个nodejs版本开始,http.createServer().listen()默认是ipv6的,所以,为了达到我想要的效果,只能是将.listen(port)改为.listen(port, '0.0.0.0')
于是我去查nodejs的api文档,看看能不能查到什么蛛丝马迹。这里是 传送门。我简单地引用一段话.

Begin accepting connections on the specified port and hostname. If the hostname is omitted, the server will accept connections on any IPv6 address (::) when IPv6 is available, or any IPv4 address (0.0.0.0) otherwise

这段话的意思是说,如果没有指定hostname的话,当前这个服务器会接受任何ipv6的主机来访问(如果有ipv6的话),否则使用ipv4。所以,当只需要获取远程客户端的ip的时候,需要指定hostname参数为 0.0.0.0,也就是 .listen(post, '0.0.0.0')

验证

当设置了ipv4格式后,每当用户访问,通过req.connection.remoteAddress能获取到用户的ipv4地址。::ffff:192.168.0.1 ---> 192.168.0.1

小结

1、尽量使用谷歌搜索问题



作者:一溪酒
链接:https://www.jianshu.com/p/bcab08f2f924
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文地址:https://www.cnblogs.com/qqhfeng/p/12514684.html