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, вы все равно сможете получить доступ к ней локально. Не будет работать для пользователей, но это устранило мою проблему, которая привела меня к этому вопросу.