Heroku + node.js: У меня есть сервер, который использует несколько портов. Как я могу получить Heroku для их распределения?
Умм, я постараюсь быть более ясным.
На сервере приложений, который я написал в node.js, у меня есть внутренний прокси для нескольких портов:
- В моем порту
8080
у меня есть rest api.
- В моем
3000
порту у меня есть мой push-сервер и чат.
Я использую пакет npm subdomain-router для внутренней маршрутизации в порт, выставляя поддомены в "front-end", который proxy обратно в эти порты.
демонстрация кода: (<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
работает (перенаправляет на путь /v1
для моего API), но не может получить доступ к <some-app>.herokuapp.com:8080
, <some-app>.herokuapp.com:3000
или chat.<some-app>.herokuapp.com
.
При попытке получить доступ к моему API, указав порт в URL-адресе (например: <some-app>.herokuapp.com:8080
), я получаю следующую ошибку в моем браузере (google chrome): ERR_CONNECTION_REFUSED
.
Моя образованная догадка говорит о том, что это может быть связано с открытием портов в геройку, но я не знаю, как это сделать (попробовал googling ofc). < ш > Это не объясняет, почему я не могу получить доступ к поддоменам.
Поблагодарили бы любой свет пролить на эту проблему.
Я новичок в геройку, и это действительно расстраивает.
Спасибо!
Amit
Ответы
Ответ 1
Хорошо, после нескольких исследований я обнаружил, что открытие портов в Heroku отключено и не разрешено.
- это использовать поддомены, а затем in-app использовать прокси-модуль (например, subdomain-router
, который я использую).
НО. Heroku не позволяет создавать поддомены в своем домене, что означает, что your-app.herokuapp.com
является фиксированным и не может иметь поддомены.
В руководствах Heroku они требуют от вашего собственного домена и провайдера dns сделать это, создав A-alias (CNAME) в таблице dns в настройках вашего домена, который будет ссылаться на ваш домен приложения herokuapp, а затем использовать команду heroku domains:add
, чтобы добавить свой домен в список разрешенных источников.
Здесь вы можете прочитать здесь. Он предоставляет всю необходимую информацию.
Надеюсь, это помогло кому-то.
Ответ 2
Я также узнал об этом сегодня, я узнал, что если вы запустите службу в порту в Heroku, вы все равно сможете получить доступ к ней локально. Не будет работать для пользователей, но это устранило мою проблему, которая привела меня к этому вопросу.