提问人:Crocodile 提问时间:2/25/2015 更新时间:6/29/2022 访问量:128323
在 Heroku 上设置节点 .js 服务器的端口
Setting the port for node.js server on Heroku
问:
我启动了一个 node.js 服务器,其中包含以下行来设置端口:
app.set('port', process.env.PORT || 8080);
这意味着,它应该读取 PORT env 变量或默认为 8080,就像在本地运行时一样。它们都没有发生在 Heroku 上,服务器始终使用默认端口 80。知道如何改变它吗?
heroku config
PORT: 8080
答:
你不能。Heroku 设置您应该绑定的 PORT 变量,并侦听 tcp/80。
评论
var server = http.createServer(sendSMSHandler); server.listen(PORT);
Heroku 将 Web 应用程序视为任何其他应用程序,并且不允许您直接分配侦听端口。您的 Web 服务器将由 Heroku 分配一个动态端口,但要访问它,您需要使用默认端口 (80)。
在 Heroku 上,应用程序是完全独立的,不依赖于 运行时将 Web 服务器注入到执行环境中,以 创建面向 Web 的服务。每个 Web 进程都简单地绑定到一个端口, 并侦听该端口上传入的请求。要绑定到的端口 由 Heroku 指定为 PORT 环境变量。
与 Heroku 签订的合同是将流程绑定到要服务的端口 请求。然后,Heroku 的路由器负责指导 HTTP 在正确的端口上请求进程。
评论
您应该像这样使用 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 通信,在端口 443 上进行通信,依此类推。下表显示了协议的所有常规预留端口号。https
现在你们中的一些人可能会想,如果这些是保留端口号,为什么我的计算机允许我使用端口号 80 和 443(例如 localhost:80)。您可以使用任何端口号(实际上,您最多可以选择 65,535 个端口号),但是一旦您想要部署到实时并希望其他人使用您的应用程序,那么您将不得不开始使用端口 80 (HTTP) 或端口 443 () 的约定。https
Heroku 通过提供一个环境变量来申请正确的常规端口号,以便其他人可以访问您的应用程序,从而让您变得友好和轻松。process.env.PORT
80 是默认端口,因此请使用 80 而不是 3000 或 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
评论
heroku config:get PORT
heroku config:unset PORT