2012-05-20 14 views
6

Sto esplorando usando il server proxy node-http-proxy in modo che possa avere il nostro server proxy sulla porta 80 inoltra richieste al nostro server di app sulla porta 8000. Tuttavia, sono un po 'confuso sul motivo per cui questa è una buona idea, e che cosa esattamente questo set proteggerebbe dal punto di vista della sicurezza.Che senso ha utilizzare un server proxy come node-http-proxy per un'app nodo con un'unica app su una porta?

La documentazione di http-proxy illustra molto sull'utilizzo come metodo per inoltrare richieste a un'app con più porte o indirizzi IP. Questo ovviamente sarebbe molto utile, in particolare con una strategia di bilanciamento del carico round robin di base. Tuttavia, abbiamo solo un'app su una porta, quindi non è necessario per noi farlo.

Se esiste un motivo di sicurezza importante per cui dovremmo utilizzare questo server proxy, mi piacerebbe sapere quali tipi di attacchi protegge. Inoltre, stiamo usando socket.io, quindi se c'è qualcosa che il proxy fa per aiutare il server Websocket scalare, mi piacerebbe capire anche questo. Stiamo avendo problemi a capire come eseguire la nostra app senza sudo (poiché tutte le porte inferiori a 1024 richiedono l'accesso root), quindi se davvero non ci sono buoni motivi per utilizzare un server proxy a questo punto, stiamo solo andando a . Se qualcuno sa come eseguire questa app con il server proxy sulla porta 80 senza accesso root, sarebbe molto utile. Grazie!

+0

solo curioso perché l'hai cercato in primo luogo?È comune usare qualcosa come nginx come proxy per servire asset statici o passare le altre richieste all'app del nodo. –

+0

@JustinSoliz Perché per quanto ne so, nginx non proxy websockets – user730569

+0

E 'stato un esempio, di nuovo solo chiedendo il motivo per cui hai cercato su node-http-proxy? cosa stai cercando di ottenere con esso –

risposta

3

Le ragioni per l'esecuzione di un proxy inverso sono:

  • Hai porte IP Limited Open e la necessità di eseguire molti servizi Nodo ognuno dei quali ha bisogno di un proprio porto
  • Il vostro servizio di back-end non supporta HTTPS ma ne hai bisogno (es. Derby)
  • Per aggiungere qualche altra caratteristica alla richiesta che non può essere fatta facilmente con il back-end come l'aggiunta dell'autenticazione di base o qualche forma di registrazione/auditing comune
  • Per applicare un'aggiunta o passare alle risposte in uscita commo n tutta una serie di servizi di back-end
  • di fornire un servizio di bilanciamento del carico

A meno che i vostri bisogni sono abbastanza semplici, sarebbe meglio usare un proxy dedicato come HAproxy dal nodo-http-proxy è piuttosto semplicistico .

+0

In realtà, node-http-proxy può gestire questa roba molto bene. Nodejitsu usa node-http-proxy in produzione, e fa quasi tutte le cose sul tuo elenco. Viene utilizzato per il bilanciamento del carico e i certificati HTTPS e reindirizza altre porte sulla porta 80. È inoltre possibile [aggiungere il middleware per modificare le richieste] (http://blog.nodejitsu.com/http-proxy-middlewares) in node-http -proxy. – CodeRarity

+0

Forse stavo facendo un po 'dure su di esso, ma la verità è che è scarsamente documentato e non ho ricevuto alcun supporto utile sul problema che ho subito riscontrato quando lo utilizzavo con HTTPS. Non ho motivo di lamentarmi - è reso disponibile gratuitamente dopo tutto - è solo che, confrontato con uno strumento proxy dedicato, non si impila per l'uso di produzione. Forse questo potrebbe cambiare se fosse meglio documentato, sarebbe certamente bello avere una toolchain di tutti i nodi. –

+0

Trovo che molte app di nodi non siano ben documentate ... In questi casi, la documentazione è il codice stesso (che non è sempre bello come leggere una documentazione ben scritta). – trusktr

1

Bene, se si esegue solo un'istanza di server, quindi non c'è davvero una ragione. I documenti node-http-proxy menzionano l'utilizzo di un singolo certificato SSL su più app, il che è molto probabile. È inoltre possibile bilanciare il carico su diversi server HTTP e socket Web (ad esempio, eseguire 10 server socket.io per i dati in tempo reale ma solo 1 server HTTP per la distribuzione delle risorse e delle API REST). Naturalmente con un caso questi non forniscono alcun vantaggio.

Se si desidera eseguire i server nodo senza sudo, forse si potrebbe provare a impostare le tabelle IP port forwarding dalla porta 80 a una porta sopra 1024. See Can I run Node.JS with low privileges?

+0

È possibile utilizzare lo stesso certificato per tutti i "server" di nodi desiderati purché vengano eseguiti dallo stesso indirizzo IP. Più indirizzi IP richiedono più certificati o fanno uso dell'indirizzamento con caratteri jolly o dell'estensione "Nome alternativo server" che non è supportato nei browser più vecchi. Non hai bisogno di un proxy per questo. –

1

Usiamo principalmente il http-proxy per avere più indietro -end server dietro un singolo IP, ma lo usiamo anche per inoltrare https a http. Rafforza la nostra app.

Per ragioni di sicurezza, potresti avere più fiducia sulla buona qualità del proxy http che sulla tua app. Il proxy build di nodejitsu è pronto per la produzione e dovrebbe essere più difficile per gli attaquants ottenere i privilegi (come leggere i file della chiave privata) su un proxy http anziché sulla tua app (ovviamente ciò dipende dalla tua abilità di sviluppo della sicurezza e dalla tua fiducia nel progetto http-proxy open source).

Problemi correlati