【问题标题】:Setting the port for node.js server on Heroku在 Heroku 上设置 node.js 服务器的端口
【发布时间】:2015-04-26 16:32:06
【问题描述】:

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

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

这意味着,它应该读取 PORT 环境变量或默认为 8080,就像它在本地运行时一样。 Heroku 上两者都没有发生,并且服务器始终使用默认端口 80。知道如何更改它吗?

heroku config
PORT: 8080

【问题讨论】:

  • heroku config:get PORT给你什么?此外,您可以尝试 heroku config:unset PORT 并查看您的硬编码默认设置是否被选中。
  • 'heroku config:get PORT' 给我 8080,但应用程序在 80 上提供服务。在 'heroku config:unset' 之后没有变化
  • 嘿,你接受了一个答案,但它看起来并不像一个答案,在我的情况下 process.env.PORT 在 heroku 上是未定义的,我有点卡在这里。

标签: node.js heroku express heroku-toolbelt


【解决方案1】:

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

【讨论】:

  • 那么,在app.js(或启动脚本)中,端口我用什么? var server = http.createServer(sendSMSHandler); server.listen(PORT);
  • @broderickga 你可以使用这样的东西:var port = process.env.PORT || 3000; app.listen(port, function() {
【解决方案2】:

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

在 Heroku 上,应用程序是完全独立的,不依赖于 将网络服务器运行时注入到执行环境中 创建面向 Web 的服务。每个 Web 进程都简单地绑定到一个端口, 并监听来自该端口的请求。要绑定的端口 由 Heroku 分配为 PORT 环境变量。

与 Heroku 的合同是为了让进程绑定到要服务的端口 要求。然后 Heroku 的路由器负责引导 HTTP 向正确端口上的进程发出请求。

参考:Heroku Runtime Principles - Web Servers

【讨论】:

  • 这行得通。如果需要,还可以在日志中查看分配的端口,并且可以通过该端口访问应用程序。
【解决方案3】:

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

port = process.env.PORT || 80

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

【讨论】:

  • 这个解决方案对我有用。
【解决方案4】:

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

【讨论】:

  • 这里也一样。我将 Config Vars 设置为端口 5000,我花了 4 个小时才发现它不在乎。无论如何,它都使用端口 80(用于 HTTP)和 443(用于 HTTPS)。我实际上是在查找并查看是否有任何文档后发现了这篇文章。
【解决方案5】:

你可以这样做:

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

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

【讨论】:

    【解决方案6】:

    所有答案都很棒!想稍微谈谈这个理论,以便人们理解为什么 Heroku 将其端口设置为 80 或 443。

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

    因此,达成了一项协议,即计算机将使用 80 端口进行 HTTP 通信,https 将使用 443 端口进行通信,依此类推。下表显示了所有协议的常规保留端口号。

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

    Heroku 通过提供环境变量 process.env.PORT 来申请正确的常规端口号,以便其他人可以访问您的应用,从而让您轻松轻松地进行操作。

    【讨论】:

    • 我想让人们知道,在后台还有很多事情正在发生。 Punund 简要提到了 TCP,还有另一个称为 UDP 用于发送数据位。我创建这个答案是为了让人们足以理解 Heroku 为什么希望你使用他们的process.env.PORT
    【解决方案7】:

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

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 2012-03-30
      • 2016-01-17
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2016-08-30
      相关资源
      最近更新 更多