zoukankan      html  css  js  c++  java
  • 关于部署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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Ubantu Mark
    异或
    C语言读书笔记
    Mark
    Python文件操作
    (转)Hadoop系列-IPC模型
    Java动态代理
    (转)适配器模式--Adapter Pattern
    关于abstract class 和 interface
    单例模式
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/12514684.html
Copyright © 2011-2022 走看看