【问题标题】:External Hello world server node js外部Hello World服务器节点js
【发布时间】:2016-09-23 19:48:21
【问题描述】:

我希望使用 Node.js 在专用 PC 上托管 Web 服务器,但我似乎无法从本地网络以外的任何地方访问它。

从我在网上找到的内容来看,似乎我所要做的就是在不同网络上的浏览器中输入 externalIp:port,我应该会看到我的 Hello World,但是如果不通过暴露我的本地主机,我就无法让它工作类似 ngrok 的东西。

有谁知道我如何从 Internet 上的外部 pc 访问我的节点服务器,而不仅仅是 localhost?

这里是重现的步骤

require("http").createServer(function(request, response){
  response.writeHeader(200, {"Content-Type": "text/plain"});
  response.write("Hello World!");
  response.end();
}).listen(8080);
  1. "node server.js" - 非常简单的服务器托管在端口 8080 上,它只发送“Hello World!”回应
  2. 在我的机器上检查 localhost:8080,查看“Hello World!”工作
  3. 从 ipchicken.com 获取外部 IP
  4. 在外部机器(电话、差异网络 pc)上检查 'externalIP':8080,无法正常工作

也许我缺少一些东西,但我认为这很简单

【问题讨论】:

  • 不确定您的网络环境是什么样的,但如果您使用家庭路由器,则需要设置端口转发。
  • 我认为一个问题可能是端口转发,有时最常见的问题是防火墙已打开。如果您的环境是 linux,那么您需要停止 iptables 和 windows 防火墙

标签: javascript node.js http server


【解决方案1】:

事实证明,我在 Optimum 中使用的路由器有一个“特殊”设置页面来允许端口 80 流量。并且端口转发页面上的任何地方都没有指向它的链接。因此,在完成所有端口转发后,请确保您点击此链接:

http://optimumdev.custhelp.com/app/answers/detail/a_id/2140/related/1

【讨论】:

    【解决方案2】:

    您需要将服务绑定到所有可用的 ip 接口,将您的监听 8080 更改为:

    require("http").createServer(function(request, response){
       response.writeHeader(200, {"Content-Type": "text/plain"});
       response.write("Hello World!");
       response.end(); 
       }).listen(8080, "0.0.0.0")
    

    【讨论】:

      【解决方案3】:

      假设您有一个标准的家庭网络设置,您不能只向您的外部 IP 地址发送请求并期望它神奇地到达您的计算机。该请求将到达您的路由器,而路由器将不知道如何处理它。您需要将路由器配置为将端口 8080 上的请求转发到您的本地地址(可能类似于 192.168.0.x)。即使这样可能还不够。您可能需要在计算机上配置软件防火墙,以允许该端口上的传入请求。希望这会有所帮助:)

      【讨论】:

      • 所以我配置了端口转发和防火墙,现在我可以看到通过 Wireshark 发送和接收的 2 个数据包,太棒了!但是,我注意到大量虚假重新传输(来自我的手机和我的 PC),但手机上仍然没有“Hello World”。所以通信不存在:/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多