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