【发布时间】:2021-04-09 16:01:10
【问题描述】:
我的应用使用 80 端口,但 heroku 不允许我的应用访问 80 端口。所以,我使用 3000 并运行它。
但是,现在我无法访问它,因为在 heroku 中无法访问端口 3000。我的应用如何获得对 heroku 的访问权限?
【问题讨论】:
我的应用使用 80 端口,但 heroku 不允许我的应用访问 80 端口。所以,我使用 3000 并运行它。
但是,现在我无法访问它,因为在 heroku 中无法访问端口 3000。我的应用如何获得对 heroku 的访问权限?
【问题讨论】:
首先,我认为这是对端口的误解。您的应用程序将在代理(又名负载均衡器)之后运行,因此您实际上不需要指定使用 80 端口(而且您不能)。 Heroku 提供环境变量 PORT,您必须使用该端口来启动您的应用程序。 Heroku 代理在 80 端口(和 443,支持 SSL)上运行,并将所有流量重定向到 PORT 端口。
您的 Node.js 应用未正确配置为绑定到 Heroku 通过
$PORT环境变量提供的端口以外的端口。
例子:
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Our app is running on port ${ PORT }`);
});
【讨论】:
PORT?这不是它的工作原理。 PORT 环境变量 将由 Heroku 自动为您设置。你只需要绑定它。
简单的答案是你不能。
Heroku 不允许您直接将侦听端口分配给您的网络应用程序。您的 Web 应用程序是自包含的,Heroku 将为它们分配一个动态端口。访问它的唯一方法是使用默认端口 (80)。
【讨论】:
port = process.env.PORT || 80
Error: listen EACCES: permission denied 0.0.0.0:80