Heroku + node.js:我有一个使用多个端口的服务器。 我怎样才能让Heroku分配它们?
呃我会尽量做得更清楚..
在我用node.js编写的应用程序服务器中,我有多个端口的内部代理:
- 在我的
8080
端口,我有我的restapi 。 - 在我的
3000
端口我有我的推服务器和聊天 。
我使用npm软件包的子域路由器进行内部路由到端口,公开了代理端口的“前端”中的子域。
代码演示: ( <some-app>
显然不是<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);
尽pipe我无法通过<some-app>.herokuapp.com:8080
访问它,但只能通过<some-app>.herokuapp.com
访问它,并让内部的subdomain-router
模块达到这个效果。
另外,我无法访问子域名。 当试图访问api.<some-app>.herokuapp.com
我从heroku得到No such app
错误页面。
TL;访问<some-app>.herokuapp.com
DR (redirect到我的API的/v1
path),但无法访问<some-app>.herokuapp.com:8080
, <some-app>.herokuapp.com:3000
或chat.<some-app>.herokuapp.com
。
当试图通过指定URL中的端口来访问我的API( 如: <some-app>.herokuapp.com:8080
)时,我的浏览器(google chrome)中出现以下错误: ERR_CONNECTION_REFUSED
。
我的教育猜测说,这可能是有关开放端口 heroku,但我不知道如何做到这一点(尝试谷歌search)。
这并不能解释为什么我不能访问子域。
希望能够解决这个问题。
我对heroku很陌生,而且越来越让人沮丧。
谢谢!
阿米特
好的,在做了一些研究之后,我发现Heroku中的开放端口是禁用的 , 不允许的 。
唯一的解决方法是使用子域名 ,然后在应用程序中使用代理模块(如我使用的subdomain-router
)。
但是 – Heroku不允许你在他们的域上创build子域名,这意味着你的 – your-app.herokuapp.com
是固定的,不能有子域名。
在Heroku手册中,他们要求你有自己的域和DNS提供者来做这样的事情,在域设置的dns表中创build一个别名(CNAME),它将引用你的应用程序herokuapp域,然后使用heroku domains:add
命令heroku domains:add
将您的域heroku domains:add
到允许的源列表。
你可以在这里阅读更多。 它提供了所有你需要的信息。
希望这有助于一些。
今天我也了解到了这一点,我了解到如果你在Heroku的一个端口上运行一个服务,你仍然可以在本地访问它。 不会为上面的用户的关心工作,但它确实解决了我的问题,导致我这个问题。