Umm je vais essayer d'être plus clair ..
Dans un serveur d'applications, j'ai écrit dans node.js, j'ai un proxy interne pour plusieurs ports:
8080
j'ai mon api rest.3000
, j'ai mon serveur Push et le chat.J'utilise le package npm subdomain-router pour le routage interne vers le port, en exposant les sous-domaines dans le "front-end" qui envoie en retour le proxy à ces ports.
démonstration de code: _ (<some-app>
n’est évidemment pas le nom réel de l’application))}
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);
L'API fonctionne très bien, bien que je ne puisse pas y accéder par le biais de <some-app>.herokuapp.com:8080
, mais uniquement par le biais de <some-app>.herokuapp.com
et laisser le module subdomain-router
intérieur faire son travail de magie.
De plus, je ne peux pas accéder aux sous-domaines. Lorsque j'essaie d'accéder à api.<some-app>.herokuapp.com
, je reçois une page d'erreur No such app
de heroku.
TL; DR accéder à <some-app>.herokuapp.com
fonctionne (redirection vers le chemin /v1
pour mon API), mais impossible d'accéder à <some-app>.herokuapp.com:8080
, <some-app>.herokuapp.com:3000
ou chat.<some-app>.herokuapp.com
.
Lorsque j'essaie d'accéder à mon API en spécifiant le port dans l'URL (comme ceci: <some-app>.herokuapp.com:8080
), l'erreur suivante apparaît dans mon navigateur (google chrome): ERR_CONNECTION_REFUSED
.
Ma supposition éclairée indique qu'il pourrait s'agir d'un problème lié à l'ouverture de ports dans heroku, mais je ne sais pas comment le faire (essayé de googler).
Cela n'explique pas pourquoi je ne peux pas accéder aux sous-domaines.
Apprécierait toute lumière apportée sur cette question.
Je suis nouveau dans heroku et ça commence à être vraiment frustrant.
Merci!
Amit
Après quelques recherches, j'ai découvert que l'ouverture de ports dans Heroku est disabled et not allowed.
Le seul moyen consiste à utiliser sous-domaines puis in-app pour utiliser un module proxy (comme subdomain-router
que j'utilise).
MAIS - Heroku ne vous permet pas de créer des sous-domaines sur leur domaine, ce qui signifie que your-app.herokuapp.com
est fixe et ne peut pas avoir de sous-domaines.
Dans les manuels Heroku, ils vous demandent d’avoir votre propre domaine et votre fournisseur DNS pour le faire, en créant un alias (CNAME) dans le tableau DNS de vos paramètres de domaine, qui fera référence à votre domaine herokuapp, puis en utilisant la commande heroku domains:add
pour ajouter votre domaine à la liste Origin autorisée.
Vous pouvez en lire plus ici . Il fournit toutes les informations dont vous avez besoin.
J'espère que ça a aidé certains.
J'ai également appris cela aujourd'hui, j'ai appris que si vous exécutez un service sur un port de Heroku, vous pouvez toujours y accéder localement. Cela ne fonctionnerait pas pour le souci de l'utilisateur ci-dessus mais cela a résolu mon problème, ce qui m'a amené à cette question.