我使用以下行启动了node.js服务器以设置端口:
app.set('port', process.env.PORT || 8080);
这意味着,它应该读取PORT env变量或默认为8080,就像在本地运行时一样。他们都没有在Heroku上发生,服务器总是使用默认端口80.任何想法如何改变它?
heroku config
PORT: 8080
答案 0 :(得分:39)
你做不到。 Heroku设置您应该绑定的PORT变量,并侦听tcp / 80。
答案 1 :(得分:5)
所有答案都很棒!希望稍微介绍一下该理论,以便人们可以理解为什么Heroku将其端口设置为80或443。
计算机必须创建一个惯例,以使用不同的协议相互通信。例如HTTP,HTTPS,SSH,FTP等。
因此,达成协议,计算机将与端口80进行HTTP通讯,https将在端口443上进行通讯,依此类推。下表显示了所有协议的常规备用端口号。
现在,如果其中一些是保留端口号,那么也许有些人想得很好,我的计算机如何让我使用端口号80和443(例如localhost:80)。您可以使用任何端口号(实际上,您可以选择最多65,535个端口号),但是一旦要部署并希望其他人使用您的应用程序,则必须开始使用端口80(HTTP)或端口的约定443(https)。
Heroku 通过提供一个环境变量process.env.PORT
来申请正确的常规端口号,以便其他人可以访问您的应用程序,使您轻松自如。
答案 2 :(得分:4)
Heroku与其他任何应用程序一样对待Web应用程序,并且不允许您直接分配监听端口。 Heroku将为您的Web服务器分配一个动态端口,但是要访问它,您将需要使用默认端口(80)。
在Heroku上,应用程序是完全独立的,不依赖 将网络服务器在运行时注入到执行环境中 创建一个面向Web的服务。每个Web进程仅绑定到一个端口, 并侦听该端口上的请求。绑定的端口 由Heroku分配为PORT环境变量。
与Heroku签订的合同是将流程绑定到要服务的端口 要求。然后,Heroku的路由器负责引导HTTP 在正确的端口上请求该进程。
答案 3 :(得分:4)
您应该像这样使用heroku打开的端口:
port = process.env.PORT || 80
将端口设置为80(如果尚未设置)
答案 4 :(得分:1)
在我的情况下,heroku正在侦听默认的HTTPS端口:443
,并且无法通过heroku config:get PORT
看到它。
答案 5 :(得分:1)
您可以例如:
const PORT = process.env.PORT || 5001;
app.listen(PORT, () => console.log(`Server is listening on port ${PORT}...`));
答案 6 :(得分:0)
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);
});