如何在Amazon Elastic Beanstalk上安全地使用端口80运行Node.js服务器?

11

对于尝试在80端口上运行Node.js服务器的人来说,以下错误很常见。

Error: listen EACCES 0.0.0.0:80

我曾经在我的亚马逊EC2服务器上解决这个问题,只需简单地使用

sudo node app.js

现在我已经了解到出于安全考虑不应使用那种方法。如此答案所述,一个好的解决方案是使用:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

然而,我不确定如何在 AWS Elastic Beanstalk 实例上实现这两种解决方案。与 AWS EC2 服务器不同,我似乎没有 SSH 访问权限,唯一的运行方式似乎是通过我的 package.json文件执行以下操作:

{
  "scripts": {
    "start": "node init"
  }
}

那么我不知道如何运行其他类型的命令。这应该怎么做?

3个回答

19

Beanstalk内置了一个代理,监听端口80。您的Node.js应用程序应仅侦听process.env.PORT。完成后,您就可以开始了。


process.env.PORT 是由谁设置的? - CodyBugstein
我不确定是否已更改,但在我的情况下,即使我将端口号设置为process.env.PORT,它返回的是8081而不是443用于https。 - Zhang Zhan
@CodyBugstein Beanstalk系统设置了那个。 - Brad
@ZhangZhan 是的,你不应该期望看到 :443... Beanstalk 在内部使用自己的代理等。 - Brad
这是文档链接:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/nodejs-platform-proxy.html - Evandro Pomatti
显示剩余3条评论

1
弹性 Beanstalk 将从其负载均衡器将请求路由到您的实例(默认情况下为端口 80)。因此,如果您想公开特定端口,则可以向负载均衡器侦听器添加条目,其中负载均衡器端口为所需端口,实例端口为 80。
希望这有所帮助。如果需要进一步解释,可以详细说明。

1

对于

"scripts": {
    "start": "node init"
  }

您可以使用以下内容指定您运行的代码是app.js

"scripts": {
    "start": "node app.js"
  }

app.js中,如果你使用了express.js。
const port = process.env.port || 3000;
app.listen(port, () => {
    console.log("Sever console log.")
});

然后您需要在Elastic Beanstalk中添加一个参数 > 选择您的环境 > 配置 > 编辑软件配置 > 添加参数 > 名称: 端口 值: 8080


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接