node.js - 使用 Heroku 的多端口应用程序的推荐方法

标签 node.js heroku port reverse-proxy

据我从 SE 上的其他问题了解到,不可能在 Heroku 应用程序中使用多个端口,因为 Heroku 会使用环境变量分配端口。

有推荐的方法来解决这个问题吗?我见过一些使用带有子域的代理模块:

Heroku + node.js: I have a server which uses multiple ports. How can I get Heroku to allocate them?

但是,在这篇文章中:

How to create a subsubdomain for an app on heroku: (e.g. sub.myapp.herokuapp.com)

这表明子域在heroku中不再可能。

在我的应用程序中,我目前正在通过 Express 提供内容,并有一个 WebSocket 服务器用于同步一些实时内容,两者都需要端口。我的问题是,heroku 中是否可以使用子域,以及为需要多个端口的 Web 应用程序提供服务的推荐方法是什么?

最佳答案

那么,回答你的问题:

您不能让单个应用程序在单个 Heroku dyno 上的多个端口上运行。

但是,您可以运行多个 Heroku dyno,并且每个都运行不同的命令。这允许您在同一项目中的 Heroku 上运行不同“类型”的服务器。执行此操作的方法是在 Procfile 中指定如何运行不同类型的服务器,例如:

web: node server.js
other-web: node other-server.js

要运行 server.js 的一个实例和 other-server.js 的一个实例,您只需告诉 Heroku 将这些进程作为 dynos 运行,如下所示:

$ heroku ps:scale web=1 other-web=1

现在——关于 websockets,Heroku 在几年前就原生支持它们(您可以在这里阅读更多相关信息: https://devcenter.heroku.com/articles/websockets )。这意味着您可以按照典型的 Websocket 模式在 Heroku 上使用 native Websocket 应用程序。

在我刚刚链接到的文档中,有一个示例 Node 应用程序 - 它还具体概述了它的工作原理。

最后,关于子域,您链接到的其他 Stack Overflow 帖子不再准确。 Heroku 很久以前就添加了对通配符域的支持(通常用于 Multi-Tenancy 目的)。

这意味着,如果您正在构建一个应用程序,希望根据子域向用户动态提供页面:那么您很幸运!这是完全支持的。你可以这样说:

$ heroku domains:add *.example.com

当您更新 DNS 以指向通配符时,您应该开始看到所有子域请求都进入您的 Heroku 应用。

要了解有关 Heroku + 子域内容的更多信息,他们在这里有一篇关于它的优秀文章:https://devcenter.heroku.com/articles/custom-domains#add-a-wildcard-domain

关于node.js - 使用 Heroku 的多端口应用程序的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690066/

相关文章:

Heroku HIPAA 合规性

ruby-on-rails - Heroku Rails 4 HTTP DELETE 方法 API 结果 "403 Access denied"

security - 德国端口扫描

c# - 检查 WCF 服务是否正在运行的最快方法

javascript 评估用户提交的简单数学node.js

javascript - 发送两个nodejs http请求,第二个依赖第一个

javascript - Node __dirname、process.cwd() 正在报告实际目录而不是符号链接(symbolic link)目录

arrays - 在有希望的数组中推送到数组在 promise 之外是空的

postgresql - 如何在不锁定整个表的情况下强制 Postgres 返回合理的行数?

java serverSocket 使用相同的端口,而客户端使用不同的端口