2

我正在为我的一项 NodeJS 实验测试驾驶 AWS Lightsail。在服务器上使用 SSH 安装 NodeJS 并运行一个演示程序(见下文)。我可以使用命令“curl localhost:3000”从 SSH 终端看到输出“Hello World”。但是当我从网络外部访问它时,使用我家用 PC 中的网络浏览器,使用公共 IP 地址和端口号 3000,它说“无法访问此站点”我已经转发了服务器上的端口 3000边。

有什么我想念的吗?

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
4

2 回答 2

3

如果您不将主机传递给.listen,则服务器将在包括 0.0.0.0 在内的所有接口上运行。但是您正在运行服务器以仅在 localhost 上侦听。更改.listen如下:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000);

您还必须添加入站流量规则(防火墙)以打开端口 3000 以通过 Internet 访问服务器,因为您的服务器在端口 3000 上运行。

  1. 单击一个实例,然后选择网络选项
  2. 转到防火墙部分,然后单击“添加另一个”,如下图所示 在此处输入图像描述
  1. 单击保存,然后您应该可以使用 http://IP:3000 访问服务器。
  2. 如果您想访问您的服务器而不在 URL 中指定端口,那么您必须配置“Nginx 反向代理”。此外,应允许端口 80(用于 http)和端口 443(https)通过防火墙。
于 2019-09-14T08:53:06.127 回答
1

如果你.listen(3000, "127.0.0.1");127.0.0.1,它只允许local机器访问服务器。您需要.listen(3000, "0.0.0.0");允许任何 IP 地址访问服务器。

于 2019-09-14T10:18:30.627 回答