2016-06-05 61 views
8

Umm Cercherò di essere più chiaro ..Heroku + node.js: Ho un server che utilizza più porte. Come posso chiedere a Heroku di assegnarli?

In un application server ho scritto in node.js, ho interno-proxy per più porte:

  • nella mia porta 8080 ho my rest api.
  • nella mia porta 3000 ho il mio assistente spinta e chat.

utilizzare il pacchetto npm subdomain-router per interni alternativo verso la porta, esponendo sottodomini nel 'front-end' che delega a quei porti.
codice dimostrativo:(<some-app> non è il vero nome della app, ovviamente)

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 funziona alla grande, anche se non posso accedervi tramite <some-app>.herokuapp.com:8080, ma solo attraverso <some-app>.herokuapp.com e lasciare che l'interno subdomain-router il modulo fa è magico.
Inoltre, non riesco ad accedere ai sottodomini. Quando provo ad accedere a api.<some-app>.herokuapp.com ottengo la pagina di errore No such app da heroku.

TL; DR accesso <some-app>.herokuapp.com opere (reindirizza al /v1 percorso per il mio API), ma in grado di accedere <some-app>.herokuapp.com:8080, <some-app>.herokuapp.com:3000 o chat.<some-app>.herokuapp.com.

Quando si cerca di accedere al mio API specificando la porta nell'URL (come questo: <some-app>.herokuapp.com:8080), ottengo il seguente errore nel mio browser (Google Chrome): ERR_CONNECTION_REFUSED.

mia supposizione istruita dice che potrebbe essere qualcosa legato alla oblò apribili in Heroku, ma non ho alcun indizio su come farlo (provato OFC googling).
Non spiega perché non riesco ad accedere ai sottodomini.

Apprezzerebbero qualsiasi luce diffusa su questo problema.
Sono nuovo di heroku e sta diventando davvero frustrante.

Grazie!
Amit

+0

Sì, ho lo stesso problema. – Antoine

+0

@AnthonyMayfield Ho trovato una soluzione e ho risposto alla mia domanda. Puoi verificarlo. Potrebbe essere quello che stai cercando. –

+0

Wow, è fantastico. 'sottodominio-router' è stato il primo pacchetto npm che abbia mai pubblicato, è fantastico incontrare qualcuno che lo usa :) – Kevin

risposta

10

Ok, dopo aver fatto qualche ricerca ho scoperto che aprire le porte a Heroku è disabilitato e non ammessi.

Il unico modo intorno a questo è quello di utilizzare sottodomini e poi in-app per utilizzare un modulo proxy (come subdomain-router che io uso).

MA - Heroku non consentono di creare sottodomini sul proprio dominio, il che significa che your-app.herokuapp.com è fisso e non può avere sottodomini.
Nei manuali di Heroku, richiedono che il proprio dominio e provider DNS effettui tale operazione, creando un alias (CNAME) nella tabella dns nelle impostazioni del dominio, che farà riferimento al dominio herokuapp dell'app e quindi utilizzare il comando heroku domains:add per aggiungere il dominio all'elenco delle origini consentite.

Puoi leggere di più here. Fornisce tutte le informazioni di cui hai bisogno.

Spero che abbia aiutato alcuni.

+0

Sì, avrai solo quella porta, ma puoi servire i tuoi websocket da lì e anche le richieste HTTP. – Antoine

0

Ho saputo anche di questo oggi, ho imparato che se si esegue un servizio su un porto di Heroku, è ancora possibile accedervi localmente. Non funzionerebbe per la preoccupazione di cui sopra, ma ha risolto il problema che mi ha portato a questa domanda.