【问题标题】:GCP Compute Engine - cannot listen on port 80?GCP Compute Engine - 无法侦听端口 80?
【发布时间】:2019-05-05 11:46:38
【问题描述】:

我创建了一个具有以下网络标签和防火墙规则的计算引擎:

所以如果我理解正确的话,机器可以监听 80 端口。 我安装了节点并创建了一个非常简单的 http 服务器,只是为了看看我是否可以通过 http 访问该框。在云控制台上通过 ssh 登录。当我尝试启动它时(例如npm start 运行服务器),它说:

Error: listen EACCES: permission denied 0.0.0.0:80

为什么?如何解决?

我在某处读到低端口号通常仅限于 root 用户,所以我尝试了sudo,它说sudo: npm: command 未找到,对于 sudo 节点类似。

另外为什么当你创建一个服务器using scripts like these时,文章说它们是以root身份执行的?这是怎么发生的?当我是启动机器并以自己身份登录的人时,为什么我不以 root 身份执行?是的,我对linux perms的理解还很新手。

谢谢...

【问题讨论】:

  • 您是否在实例的网络标签中添加了 http-server 标签?
  • @EmreSülün 我不记得在创建过程中遇到过任何称为“网络标签”的东西。我现在在哪里可以找到这个标志,表明 VM 已经创建?我会去gcp看看我是否能找到这样的东西......更新:是的,我做到了。在 Q 中更新图像。

标签: node.js google-cloud-platform google-compute-engine


【解决方案1】:

为了使用低于 1024 的 TCP 端口,您的节点服务器必须以 root 权限运行。 TCP 端口 1024 及更高版本不需要特权。

当您登录 Google Cloud Compute Engine 实例时,您是以 normal 用户身份登录的。您没有 root 权限。要为命令授予 root 权限,请在其前面加上 sudo。示例:sudo mkdir /directoryname。

我确实不建议以 root 权限运行节点服务器。这会在您的系统中打开一个可能严重的安全漏洞。在决定之前先在互联网上搜索这个主题。

您的选择是:

  1. 选择1023以上的端口。常用端口号:8000、8080、5000。
  2. 以root权限启动节点服务器:sudo node hello.js

关于未找到 npm。您需要修改环境的 PATH 变量,以包含您为用户 root 安装节点工具集的位置。

【讨论】:

  • 他还可以运行像nginx这样的反向代理,为域代理该端口。
  • 另一个项目。由节点、Flask 等微型服务器提供的 Web 服务并非设计为可靠的。它们旨在提供micro-services。它们被设计为随时启动和终止。它们在containers、kubernetes 等中非常有用。它们在作为服务器的普通计算实例上充其量是problematic。
  • 除非pm2 或forever 正在执行健康检查,否则它们不会在可靠性方程中添加任何内容。他们只是让一个进程在后台运行。它们不会检测到故障。
  • @JohnHanley,DakshMiglani,我还不了解微服务和 kubernetes 或 nginx。我只是一个学习如何使用 gcp 的 nodejs 开发人员。很高兴了解不适合可靠事物的服务类型。我只是在学习:这台服务器几乎什么都不做。我只是卡住了,因为我无法运行它。将使用差异端口并接受 ans thx。
  • @yen - 只使用端口 8000 或 8080,这很常见。发展和学习。然后担心负载均衡器、反向代理、容器等。
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 2019-11-08
  • 2019-06-23
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多