客户端使用socket.io进行生产的IP地址是什么?

时间:2014-08-20 15:01:20

标签: node.js websocket socket.io client-server real-time

我现在使用的代码是:

    <!--Socket.io -->
    <script src='http://172.16.17.185:3000/socket.io/socket.io.js'></script>

其中,172.16.17.185是运行我的服务器的LAN上的IP地址,端口3000用于socket.io通信。

socket.io网站上的示例使用localhost代替服务器IP地址。我从这开始。使用localhost,我的页面在服务器上正常加载,但是LAN上没有其他PC能够创建套接字对象(因为它试图在其localhost上查找socket.io,但那里没有)。

所以,我将localhost更改为服务器的IP地址,一切正常。

直到,我尝试从外面访问它。由于此IP地址仅在LAN上有效,因此它无法像在互联网上那样工作。

这个问题有解决方法吗?或者我是否需要找到服务器的公共IP并使用它?这是否会为服务器创建任何安全漏洞,因为我没有授权?

到目前为止:http://www.ipsacademy.org/weather

web-server.js

中的服务器代码

2 个答案:

答案 0 :(得分:1)

如果要从LAN外部访问socket.io服务器,必须使用公共IP(并且可能避免使用端口3000)。

在生产环境中,您必须使用前端代理(如nginx)将请求转换为您的socket.io服务器到专用LAN地址。

nginx blog中的示例后,您可以使用以下内容:

location /socket.io/ {
    proxy_pass http://172.16.17.185:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";    
}

这不会导致任何安全问题与Internet上任何可公开访问的服务不同。

答案 1 :(得分:1)

查看代码,您使用单独的http实例来提供page和socket.io。如果将其更改为使用相同的http服务器,则可以使用socket.io connection的相对URL。