- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
嗯,我会尽量说得更清楚..
在我用 node.js 编写的应用服务器中,我有多个端口的内部代理:
8080
端口我有我的rest 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.com
时我得到 No such app
来自 heroku 的错误页面。
TL;DR 访问 <some-app>.herokuapp.com
有效(重定向到我的 API 的 /v1
路径),但无法访问 <some-app>.herokuapp.com:8080
, <some-app>.herokuapp.com:3000
或 chat.<some-app>.herokuapp.com
.
当尝试通过在 url 中指定端口来访问我的 API 时(像这样:<some-app>.herokuapp.com:8080
),我在浏览器(谷歌浏览器)中收到以下错误:ERR_CONNECTION_REFUSED
.
我有根据的猜测说这可能与在 heroku 中打开端口有关,但我不知道该怎么做(尝试谷歌搜索 ofc)。< br/>它并没有解释为什么我无法访问子域。
希望能对此问题有所了解。
我是 heroku 的新手,它变得非常令人沮丧。
谢谢!
阿米特
最佳答案
好的,经过一番研究,我发现在 Heroku 中打开端口是禁用并且不允许。
解决此问题的唯一方法是使用子域,然后在应用内使用代理模块(如subdomain-router
我用的)。
但是 - Heroku 不允许您在其域上创建子域,这意味着 your-app.herokuapp.com
是固定的,不能有子域.
在 Heroku 手册中,他们要求您拥有自己的域和 dns 提供商来执行此操作,方法是在域设置的 dns 表中创建一个 A-alias (CNAME),这将引用您的应用程序 herokuapp 域,然后使用命令 heroku domain:add
将您的域添加到允许的来源列表。
您可以阅读更多 here .它提供了您需要的所有信息。
希望对一些人有所帮助。
关于node.js - Heroku + node.js : I have a server which uses multiple ports. 如何让 Heroku 分配它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636580/
我是一名优秀的程序员,十分优秀!