访问服务器外部的本地主机

访问服务器外部的本地主机

我是 node.js 的新手,正在尝试掌握实际使用方法。我非常熟悉 JavaScript,因此该语言本身是不言自明的,但 Node.js 的使用与浏览器实现有很大不同。

我有自己的远程虚拟服务器,安装了 Node 和包管理器,一切运行正常。我并不是一名服务器专家,对终端和 Apache 配置的经验有限。

我可以使用以下方式运行我的服务器:

nodejs index.js

这给了我:listening on *:3300正如预期的那样。

然后我可以使用以下命令从终端访问我的本地主机:curl http://localhost:3300/这给了我期望的响应。

鉴于链接到我的服务器的网站是https://example.com,我尝试使用 连接到该服务器,但http://example.com:3300/没有成功,因为我只得到ERR_CONNECTION_TIMED_OUT。我不确定如何访问它。

答案1

访问 localhost 不是问题,因为您已经在监听 *(即所有接口)。为了让任何人使用名称“example.com”访问您的服务器,它必须解析为一个可从客户端计算机到达您的服务器的 IP。这意味着什么取决于您的环境。

为了进行测试,如果您尝试从运行 node.js 的同一台计算机访问该站点(仅适用于测试),我建议将环回地址添加到系统 dns 名称缓存中。unix 上的 /etc/hosts 和大多数 windows 上的 Windows\system32\drivers\etc\hosts。如前所述,这仅适用于测试:将行:添加到127.0.0.1 example.com文件末尾的一行中。

对于生产用途,以便其他人可以访问您的网站,您需要一个 dns(域名服务)提供商将您的名称绑定到您的公共 IP。这将花费大约 10 美元/年。您还需要一个未被其他人的 ISP 阻止的公共 IP,最好是一个不经常更改的 IP。这可以是便利重定向(不推荐,如果只是为了带宽和可用性限制)到小型托管应用程序(25-100 美元/年及以上,取决于空间和计算需求)。

这两种服务都是由云提供商提供的,只需搜索云托管服务即可。流行的提供商包括 go daddy 和 amazon web services。我对 AWS 的体验更好。

此外,将 nodejs 暴露给公共 ip 可能不是最好的主意。我进一步建议您研究一些中间件,例如 apache 或 nginx,以将您的应用程序包装在可以监听传统 http 请求的程序中。

编辑以回应评论:

在这种情况下,您需要在 apache 配置中定义部分 url 路径。这称为反向代理,这意味着您定义一条规则,规定哪些 url/请求应重定向(代理)到 node.js,apache 会将它们引导到那里。请参阅此处的 apache 文档和此 serverfault 问题:

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

https://serverfault.com/questions/497856/using-an-apache-virtualhost-to-access-a-node-js-instance-on-the-same-server

请注意,apache 文档倾向于假设后端应用程序在另一台服务器上运行,但它对 localhost 的作用相同。您需要 proxypass 和 proxypassreverse 指令。

答案2

代替const hostname = '127.0.0.1';

做:const hostname = '0.0.0.0';

相关内容