当前位置: 首页 > 面试题库 >

Heroku + node.js:我有一台使用多个端口的服务器。如何让Heroku分配它们?

涂选
2023-03-14
问题内容

嗯,我会尽量清楚一点。

在用node.js编写的应用程序服务器中,我具有用于多个端口的内部代理:

  • 在我的8080港口,我有 休息用的api
  • 在我的3000港口,我有 推服务器和聊天室

我使用npm包subdomain-router进行内部路由到端口,在“前端”中公开子域,这些子域代理回到那些端口。
代码演示: <some-app>并非该应用的实名明显)

require('subdomain-router')
({
  host: '<some-app>.herokuapp.com',
  subdomains:
  {
    '': 8080,   // <some-app>.herokuapp.com <=> ::8080   --WORKS--
    'api': 8080,  // api.<some-app>.herokuapp.com <=> ::8080
    'chat': 3000, // chat.<some-app>.herokuapp.com <=> ::3000
    'push': 3000  // push.<some-app>.herokuapp.com <=> ::3000
  }
}).listen(process.env.PORT || 5000);

该API很好用,尽管我无法通过进行访问<some-app>.herokuapp.com:8080,而只能通过<some- app>.herokuapp.com并让内部subdomain-router模块实现它的魔力。
另外,我无法访问子域。尝试访问时,api.<some-app>.herokuapp.comNo such app从heroku中获取错误页面。

TL; DR 访问<some-app>.herokuapp.com作品(重定向/v1路径为我的API),但无法访问<some- app>.herokuapp.com:8080<some-app>.herokuapp.com:3000chat.<some- app>.herokuapp.com

尝试通过在url中指定端口来访问我的API( 例如<some- app>.herokuapp.com:8080:)时,在浏览器(谷歌浏览器)中出现以下错误:ERR_CONNECTION_REFUSED

根据我的推测 ,这可能与在heroku中 打开端口 有关,但是我不知道如何执行此操作(尝试使用谷歌搜索功能)。
它没有解释为什么我不能访问子域。

希望您能对此问题有所启发。
我是heroku的新手,真让人感到沮丧。

谢谢!
阿米特


问题答案:

好的,经过研究后,我发现Heroku中的开放端口已被 禁用, 并且是 不允许的

解决此问题的 唯一方法 是使用 子域 ,然后在应用程序内使用代理模块(例如subdomain-router我使用的代理模块)。

但是 -Heroku不允许您在其域上创建子域,这意味着它your-app.herokuapp.com是固定的,不能有子域。
在Heroku手册中,他们要求您拥有自己的域和dns提供程序来执行此操作,方法是在域设置的dns表中创建一个A别名(CNAME),该别名将引用您的应用程序herokuapp域,然后使用heroku domains:add用于将您的域添加到允许的来源列表的命令。

您可以在这里阅读更多内容。它提供了您需要的所有信息。

希望它对一些人有所帮助。



 类似资料:
  • 问题内容: 我使用以下行启动了node.js服务器来设置端口: 这意味着,它应该像本地运行时那样读取PORT env变量或默认为8080。它们都不在Heroku上发生,并且服务器始终使用默认端口80。如何更改该端口? 问题答案: 你不能 Heroku设置您应该绑定的PORT变量,并在tcp / 80上进行侦听。

  • 这个问题类似于服务器和客户端之间通信的一般问题,但是这个问题可能是heroku特有的,因为服务器端口是由heroku在'process.env.port'变量中提供的。 我的后端Express/MongoDB应用程序已经部署在Heroku上。它侦听分配的端口=process.env.port,这是服务器每次启动时的一个新端口 前端vue.js运行在同一个express服务器上,并使用axios进行

  • 问题内容: 是否可以在一个应用程序中绑定和侦听Linux中的多个端口? 问题答案: 对于您要收听的每个端口,您: 使用创建一个单独的套接字。 将其绑定到适当的端口。 调用套接字,以便它设置一个侦听队列。 那时,您的程序正在侦听多个套接字。为了接受这些套接字上的连接,您需要知道客户端要连接到哪个套接字。就是这样。碰巧的是,我有代码可以完全做到这一点,所以这是一个完整的经过测试的示例,它等待多个套接字

  • Heroku在日志中标识它正在尝试访问一个我没有使用的MongoDB碎片(但使用过一次)。错误消息显示: “无法连接到服务器[Swarmage-Shard-00-00-ekq8j.gcp.MongoDB.net:27017]” 但我不知道它为什么要连接那个服务器。 我正在将应用程序部署到。Heroku链接到我的数据库。我可以通过mongo shell与数据库交互。当我在本地服务器上运行时,post

  • 我尝试使用Java中的Sockets连接到多个客户端。一切似乎都正常,但问题是,服务器只监听第一个客户端。如果有多个客户端,服务器可以向它们发送所有消息,但他可以只监听来自第一个客户端的消息。我尝试了所有这些(我从昨天开始就遇到了这个问题)。所以我很确定,错误一定在“ClientListener”类中。 说明:有一个客户端列表(用于与字符串通信的连接)。在GUI中有一个列表,我可以在其中选择要与哪

  • 问题内容: 我知道node.js是单线程,异步,无阻塞的I / O。我已经读了很多。例如,PHP每个请求使用一个线程,但是节点仅对所有线程使用一个线程。 假设有三个请求a,b,c同时到达node.js服务器。这些请求中的三个需要大型阻止操作,例如,它们都希望读取相同的大文件。 然后,如何将请求排队,将按什么顺序执行阻塞操作,以及按什么顺序分派响应?当然使用多少个线程? 请告诉我三个请求从请求到响应