netty-socketio 部署阿里云使用localhost正常启动,使用公网ip启动失败

背景:使用 netty-socketio 搭配前端的socket.io.js 做实时的系统通知。

netty-socketio的host属性填写localhost或本地ip都没问题在本地测试运行正常。部署到阿里云服务器上时,心想此时的host属性值应为该公网ip,这样配置完后启动就报错了。。。

Caused by: java.net.BindException: Cannot assign requested address: bind

意思就是说配置的ip绑定失败,心想这按理说是没事的,应该是阿里云做了什么设置。

解决办法:

      host属性值变成阿里云的内网ip,前端访问时依旧使用外网ip,或是nginx反向代理也可以。
     ps:内网ip怎么获得?
    1、若你能登录进云服务器的Linux系统的话,使用 ifconfig 指令就可以获取。
    2、若你能登录阿里云的云服务器后台管理的话,在 “实例” 里面看到的私网ip就是了。

 

一个题外话:

以前用nginx做反向代理时,做了个这样的配置:

   location ~ /api/ {
       proxy_pass http://114.215.144.30:9001;     #114.215.144.30 为公网ip
    }

我当时觉得被代理的ip+端口,应该也能被直接访问到,为此还专门对外开放了9001,才能访问通了。但是这样nginx就起不到了保护被代理的服务器,隐藏真实ip和端口的作用了。但当时时间比较紧,就没再管这个事。这次遇到了上面这个问题,思考了一下为什么内网ip就可以,又联想了一下这个问题,顿时恍然大悟。反向思考一下,觉得这个反向代理时也可以使用内网ip,若成功了话,也不用在额外开放这个被代理的端口了,这样才是正确的反向代理。于是我试了一下,真的可以。






 

你可能感兴趣的:(日常开发小问题)