如何使用 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”