【问题标题】:How do I safely run a Node.js server on port 80 with Amazon Elastic Beanstalk?如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?
【发布时间】: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"
  }
}

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

【问题讨论】:

    标签: node.js amazon-web-services


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2019-02-16
        • 2012-12-29
        • 2011-08-31
        • 2015-01-06
        • 2013-09-16
        • 2013-10-24
        • 2013-09-13
        • 2017-10-03
        • 1970-01-01
        相关资源
        最近更新 更多