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

Posted

技术标签:

【中文标题】如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?【英文标题】:How do I safely run a Node.js server on port 80 with Amazon Elastic Beanstalk? 【发布时间】:2017-02-25 06:32:39 【问题描述】:

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

Error: listen EACCES 0.0.0.0:80

我曾经在我的 Amazon EC2 服务器上解决这个问题,只需使用

sudo node app.js

现在我学会了不要出于安全考虑使用这种方法。 in this answer 解释的一个很好的解决方案是使用:

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"
  

所以我不知道如何运行其他类型的命令。这是怎么做到的?

【问题讨论】:

【参考方案1】:

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

【讨论】:

谁设置process.env.PORT 我不确定它是否已更改,但在我的情况下,即使我将端口号设置为 process.env.PORT,它也会为 https 返回 8081 而不是 443 @CodyBugstein Beanstalk 系统设置了这一点。 @ZhangZhan 是的,你不应该指望:443... Beanstalk 使用自己的代理,而不是内部。 @Brad 但问题是,如果我使用 process.env.PORT,它会将浏览器重定向到端口 8081,这并不理想,因为它会显示在浏览器地址中,而且对防火墙也不友好。跨度> 【参考方案2】:

Elastic beanstalk 会将请求从其负载均衡器路由到您的实例(默认为端口 80)。因此,如果您想公开特定端口,可以向负载均衡器侦听器添加一个条目,其中负载均衡器端口为您所需的端口,实例端口为 80。 希望这可以帮助。如有需要可进一步详述。

【讨论】:

【参考方案3】:

对于

"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

【讨论】:

以上是关于如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Elastic Beanstalk 如何采用自定义 python 命令?

如何使用 Spring Boot 应用程序登录 Amazon Elastic Beanstalk

如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)

如何使用 .ebextensions 在 Amazon Elastic Beanstalk 中运行“npm install”

Amazon Elastic Beanstalk Java 如何获取 Oracle JDK

如何使用 Amazon AWS Elastic Beanstalk 部署私有 python pip 依赖项?