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

时间:2015-02-24 21:02:42

标签: node.js heroku express heroku-toolbelt

我使用以下行启动了node.js服务器以设置端口:

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

这意味着,它应该读取PORT env变量或默认为8080,就像在本地运行时一样。他们都没有在Heroku上发生,服务器总是使用默认端口80.任何想法如何改变它?

heroku config
PORT: 8080

7 个答案:

答案 0 :(得分:39)

你做不到。 Heroku设置您应该绑定的PORT变量,并侦听tcp / 80。

答案 1 :(得分:5)

所有答案都很棒!希望稍微介绍一下该理论,以便人们可以理解为什么Heroku将其端口设置为80或443。

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

因此,达成协议,计算机将与端口80进行HTTP通讯,https将在端口443上进行通讯,依此类推。下表显示了所有协议的常规备用端口号。

enter image description here

现在,如果其中一些是保留端口号,那么也许有些人想得很好,我的计算机如何让我使用端口号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   在正确的端口上请求该进程。

参考:Heroku Runtime Principles - Web Servers

答案 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 而不是 30008000

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);
});