В Heroku + узел.ДШ: у меня есть сервер, который использует несколько портов. Как я могу заставить Heroku выделить их?

мм, я постараюсь быть более ясным..

на сервере приложений я написал в узел.js, у меня есть внутренний прокси для нескольких портов:

  • в своем 8080 порт у меня API-интерфейс REST.
  • в своем 3000 порт у меня нажимаем сервер и чат.

я использую пакет npm поддомен-маршрутизатор для внутренней маршрутизации к порту, выставляя поддомены в "интерфейсе", который прокси вернемся к тем портам.
код демонстрации: (<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.

мое предположение говорит, что это может быть что-то связанное с открытие портов в heroku, но я понятия не имею, как это сделать (попробовал googling ofc).
Он однако не объясняет, почему я не могу получить доступ к поддоменам.

был бы признателен за любой свет, пролитый по этому вопросу.
Я новичок в heroku, и это действительно расстраивает.

спасибо!
Амит!--17-->

2 ответов


хорошо, после некоторых исследований я узнал, что открытие портов в Heroku-это отключен и не допускается.

на только С помощью суб-доменов а затем в приложении, чтобы использовать прокси-модуль (например,subdomain-router который я использую).

но - Heroku не позволяют создавать поддомены на своем домене, что означает, что your-app.herokuapp.com является фиксированным и не может иметь поддоменов.
В руководствах Heroku они требуйте, чтобы у вас был собственный домен и DNS-провайдер для этого, создав a-alias (CNAME) в таблице dns в настройках Вашего домена, который будет ссылаться на ваш домен приложения herokuapp, а затем с помощью команды heroku domains:add добавить домен в список разрешенных происхождения.

вы можете подробнее здесь. Он предоставляет всю необходимую информацию.

надеюсь, это помогло.


Я также узнал об этом сегодня, я узнал, что если вы запустите службу на порту в Heroku, вы все еще можете получить доступ к нему локально. Не будет работать для беспокойства пользователя выше, но он исправил мою проблему, которая привела меня к этому вопросу.