在 Heroku 上为 node.js 服务器设置端口

我用以下代码启动了一个 node.js 服务器来设置端口:

app.set('port', process.env.PORT || 8080);

这意味着,它应该读取 PORT env 变量或默认值为8080,就像在本地运行时一样。这两种情况都不会发生在 Heroku 上,而且服务器总是使用默认端口80。有办法改变吗?

heroku config
PORT: 8080
120710 次浏览

Heroku 设置应该绑定的 PORT 变量,并监听 tcp/80。

Heroku 像对待其他应用程序一样对待网络应用程序,并且不允许你直接分配监听端口。你的 web 服务器将被 Heroku 分配一个动态端口,但是为了访问它,你需要使用默认端口(80)。

在 Heroku,应用程序是完全独立的,不依赖于 运行时将 webserver 注入到执行环境中,以 创建一个面向 Web 的服务。每个 Web 进程只是绑定到一个端口, 并监听来自该端口的请求。要绑定到的端口 由赫罗库指定为港口环境变量。

与 Heroku 签订的合同是将流程绑定到一个港口提供服务 然后,Heroku 的路由器负责引导 HTTP 请求到右端口上的进程。

参考资料: Heroku 运行时原则-Web 服务器

你应该这样使用 heroku 打开的端口:

port = process.env.PORT || 80

如果端口尚未设置,则将端口设置为80

在我的例子中,heroku 正在监听默认的 HTTPS 端口: 443,并且不能通过 heroku config:get PORT看到它。

你可以举个例子:

const PORT = process.env.PORT || 5001;


app.listen(PORT, () => console.log(`Server is listening on port ${PORT}...`));

所有的答案都很棒!我想稍微提一下这个理论,这样人们就能理解为什么 Heroku 把端口设置为80或443。

计算机必须创建一个 大会来使用不同的协议相互通信。例如 HTTP、 HTTPS、 SSH、 FTP 等。

因此,双方达成了一项协议,即计算机将与端口80通信 HTTP,https将在端口443上通信,以此类推,与其他协议进行通信。下面的表格显示了所有协议的常规备用端口号。

enter image description here

现在你们中的一些人可能会想,如果这些是保留端口号,为什么我的计算机让我使用端口号80和443(ex localhost: 80)。您可以使用任何端口号(实际上您可以选择最多65,535个端口号) ,但是一旦您希望部署到实时端口,并希望其他人使用您的应用程序,那么您将不得不开始使用端口80(HTTP)或端口443(https)的约定。

Heroku 通过提供一个环境变量的 process.env.PORT来申请正确的传统端口号,让其他人可以访问您的应用程序,从而使您的应用程序变得简单易用。

80 是默认端口,因此使用 80代替 3000或 < strong > 8000

const PORT = process.env.PORT || 80;
var server = app.listen(PORT, function() {
var host = server.address().address;
var port = server.address().port;
console.log("server is listening at http://%s:%s", host, port);
});

Heroku 上可以使用不同的端口,只要也使用主 $PORT。 参见 https://stackoverflow.com/a/43911373/9646899