嗯,我会尽力更清晰地说明:
在我编写的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
来访问它,而不能通过<some-app>.herokuapp.com:8080
来访问。同时,我无法访问子域名。当尝试访问api.<some-app>.herokuapp.com
时,我会从heroku得到No such app
错误页面。TL;DR:可以访问
<some-app>.herokuapp.com
(将其重定向到我的API的/v1
路径),但无法访问<some-app>.herokuapp.com:8080
、<some-app>.herokuapp.com:3000
或chat.<some-app>.herokuapp.com
。在URL中指定端口时(如此:<some-app>.herokuapp.com:8080
),我在浏览器(Google Chrome)中得到以下错误:ERR_CONNECTION_REFUSED
。我猜测这可能与在heroku中开放端口有关,但我不知道如何做(已经尝试过谷歌搜索了)。这并不解释为什么我无法访问子域名。希望有人能解决这个问题。我是新手,很沮丧。谢谢!Amit