Apache e Node.js sullo stesso server

Voglio usare Node perché è veloce, usa la stessa lingua che sto usando sul lato client, ed è non-bloccante per definizione. Ma il ragazzo che ho ingaggiato per scrivere il programma per la gestione dei file (salvataggio, modifica, ridenominazione, download, caricamento di file, ecc.), Vuole usare Apache. Quindi, devo:

  1. Convincalo a usare Node (sta rinunciando a poco)

  2. Scopri come caricare, scaricare, rinominare, salvare, ecc. File nel nodo o

  3. Devo installare apache e node sullo stesso server.

Qual è la situazione più favorevole e come posso implementarla?

Ottima domanda!

Ci sono molti siti web e app web gratuite implementate in PHP che funzionano su Apache, molte persone lo usano per poter creare qualcosa di abbastanza semplice e inoltre, è un modo semplice per servire contenuti statici. Il nodo è veloce, potente, elegante e uno strumento sexy con la potenza pura di V8 e uno stack piatto senza dipendenze integrate.

Voglio anche la facilità / flessibilità di Apache e tuttavia il grugnito e l’eleganza di Node.JS, perché non posso averli entrambi ?

Fortunatamente con la direttiva ProxyPass in httpd.conf Apache non è troppo difficile convogliare tutte le richieste su un particolare URL all’applicazione Node.JS.

 ProxyPass /node http://localhost:8000 

Inoltre, assicurati che le seguenti righe NON siano commentate in modo da ottenere il proxy e il sottomodulo corretti per redirect le richieste http:

 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so 

Quindi esegui l’app Node sulla porta 8000!

 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Apache!\n'); }).listen(8000, '127.0.0.1'); 

Quindi puoi accedere a tutta la logica Node.JS utilizzando il /node/ percorso del tuo url, il resto del sito web può essere lasciato ad Apache per ospitare le tue pagine PHP esistenti:

inserisci la descrizione dell'immagine qui

Ora l’unica cosa che rimane è convincere la tua società di hosting a lasciarti correre con questa configurazione !!!

Questa domanda appartiene più a Server Fault ma FWIW direi che eseguire Apache di fronte a Node.js non è un buon approccio nella maggior parte dei casi.

Il ProxyPass di Apache è fantastico per un sacco di cose (come esporre servizi basati su Tomcat come parte di un sito) e se l’app Node.js svolge solo un ruolo specifico, piccolo o è uno strumento interno che è probabile che abbia un numero limitato di utenti allora potrebbe essere più semplice usarlo per poterlo far funzionare e andare avanti, ma non sembra il caso qui.

Se vuoi sfruttare le prestazioni e le dimensioni che otterrai dall’uso di Node.js – e soprattutto se vuoi utilizzare qualcosa che implica il mantenimento di una connessione persistente come i socket Web – è meglio che esegua sia Apache che il tuo Node. js su altre porte (ad esempio Apache su localhost: 8080, Node.js su localhost: 3000) e quindi eseguendo qualcosa come nginx, Varnish o HA proxy in primo piano e instradando il traffico in questo modo.

Con qualcosa come varnish o nginx puoi indirizzare il traffico in base al percorso e / o all’host. Entrambi usano molto meno risorse di sistema ed è molto più scalabile che usare Apache per fare la stessa cosa.

Istruzioni per eseguire il node server lungo il node server apache2(v2.4.xx) server :

Per convogliare tutte le richieste su un particolare URL all’applicazione Node.JS creare il file CUSTOM.conf all’interno della directory /etc/apache2/conf-available e aggiungere la seguente riga al file creato:

 ProxyPass /node http://localhost:8000/ 

Modifica 8000 al numero di porta preferito per il node server .
Abilita le configurazioni personalizzate con il seguente comando:

 $> sudo a2enconf CUSTOM 

CUSTOM è il nome file appena creato senza estensione, quindi abilita proxy_http con il comando:

 $> sudo a2enmod proxy_http 

dovrebbe abilitare sia proxy moduli proxy che proxy_http . Puoi verificare se il modulo è abilitato o meno con:

 $> sudo a2query -m MODULE_NAME 

Dopo la configurazione e i moduli abilitati, sarà necessario riavviare il server Apache:

 $> sudo service apache2 restart 

Ora puoi eseguire il nodo server. Tutte le richieste URL/node saranno gestite dal server nodo.

L’esecuzione di Node e Apache su un server è banale in quanto non confliggono. NodeJS è solo un modo per eseguire il lato server JavaScript. Il vero dilemma deriva dall’accedere sia al nodo che ad Apache dall’esterno. Per come la vedo tu hai due scelte:

  1. Imposta Apache per eseguire il proxy di tutte le richieste di corrispondenza a NodeJS, che eseguirà il caricamento dei file e qualsiasi altra cosa nel nodo.

  2. Avere Apache e Node su diverse combinazioni di porte IP: (se il proprio server ha due IP, allora uno può essere associato al listener del nodo, l’altro ad Apache).

Sto anche iniziando a sospettare che questo potrebbe non essere quello che stai effettivamente cercando. Se il tuo objective finale è quello di scrivere la logica della tua applicazione in Nodejs e parte della “gestione dei file” che offload a un appaltatore, allora è davvero una scelta di lingua, non un server web.

puoi utilizzare un approccio diverso, ad esempio scrivere un server proxy inverso con nodejs per eseguire il proxy sia di apache che di tutte le altre app di nodejs.

Per prima cosa è necessario eseguire apache su una porta diversa dalla porta 80. ex: porta 8080

allora puoi scrivere uno script proxy inverso con nodejs come:

 var proxy = require('redbird')({port: 80, xfwd: false); proxy.register("mydomain.me/blog", "http://mydomain.me:8080/blog"); proxy.register("mydomain.me", "http://mydomain.me:3000"); 

il seguente articolo descrive l’intero processo di creazione di questo.

http://wathmal.me/blog/run-apache-with-node-js-reverse-proxy/

 ProxyPass /node http://localhost:8000/ 
  • questo ha funzionato per me quando ho fatto sopra la voce in httpd-vhosts.conf invece di httpd.conf
  • Ho installato XAMPP sul mio ambiente e stavo cercando di colpire tutto il traffico di apache sulla porta 80 con l’applicazione NodeJS in esecuzione sulla porta 8080 ovvero http: // localhost / [nome_del_punto_applicativo]

Stavo cercando le stesse informazioni. Finalmente trovato la risposta dal link sulla risposta sopra di @Straseus

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

Ecco la soluzione finale per eseguire il sito Web Apache sulla porta 80, il servizio node js sulla porta 8080 e utilizzare .htaccess RewriteRule

Nel DocumentRoot del sito Web di apache, aggiungere quanto segue:

 Options +FollowSymLinks -MultiViews  RewriteEngine on # Simple URL redirect: RewriteRule ^test.html$ http://arguments.callee.info:8000/test/ [P] # More complicated (the user sees only "benchmark.html" in their address bar) RewriteRule ^benchmark.html$ http://arguments.callee.info:8000/node?action=benchmark [P] # Redirect a whole subdirectory: RewriteRule ^node/(.*) http://arguments.callee.info:8000/$1 [P] 

Per il reindirizzamento a livello di directory, il link sopra suggerito (. +) Regola, che richiede uno o più caratteri dopo il ‘nodo /’. Ho dovuto convertirlo in (. *) Che è pari a zero o più perché le mie cose funzionino.

Grazie mille per il collegamento @Straseus

Suppongo che tu stia creando un’app Web perché ti riferisci ad Apache e Node. Risposta rapida – È ansible – SÌ. È raccomandato – NO. Il nodo raggruppa il proprio server web e la maggior parte dei siti Web viene eseguito sulla porta 80. Suppongo anche che al momento non sia disponibile alcun plug-in Apache supportato da Nodejs e non sono sicuro che la creazione di un host virtuale sia il modo migliore per implementarlo. Queste sono le domande a cui dovrebbero rispondere gli sviluppatori che mantengono Nodejs come i bravi ragazzi di Joyent.

Invece delle porte, sarebbe meglio valutare lo stack tecnologico di Node che è completamente diverso dalla maggior parte degli altri ed è per questo che lo amo, ma comporta anche alcuni compromessi che dovresti conoscere in anticipo.

Il tuo esempio è simile a un CMS o a un’app Web di condivisione e ci sono centinaia di app disponibili che verranno eseguite correttamente su Apache. Anche se non ti piacciono le soluzioni readymade, potresti scrivere una webapp in PHP / Java / Python o combinarla con un paio di app già pronte e tutte sono progettate e supportate per essere eseguite dietro una singola istanza di Apache.

È tempo di fermarsi e pensare a quello che ho appena detto.

Ora sei pronto per decidere quale techstack utilizzerai. Se il tuo sito Web non utilizzerà mai nessuna delle migliaia di app pronte che richiedono Apache, allora vai su Nodo altrimenti devi prima eliminare le ipotesi che ho affermato in precedenza.

Alla fine, la scelta del techstack è molto più importante di ogni singolo componente.

Sono completamente d’accordo con @Straseus che è relativamente banale utilizzare l’API del file system node.js per la gestione di upload e download, ma pensa a più cosa desideri dal tuo sito web a lungo termine e poi scegli il tuo techstack.

La struttura del Learning Node è più semplice dell’apprendimento di altri framework, ma non è una panacea. Con uno sforzo leggermente maggiore (che può essere uno sforzo utile in sé), puoi anche imparare qualsiasi altra struttura. Tutti impariamo gli uni dagli altri e sarete più produttivi se lavorate come una piccola squadra piuttosto che se lavorate da soli e le vostre capacità tecniche di back-end si svilupperanno anche più velocemente. Pertanto, non sottovalutare le competenze degli altri membri della tua squadra in modo così economico.

Questo post ha circa un anno e probabilmente hai già deciso, ma spero che il mio rant aiuterà la prossima persona che sta attraversando una decisione simile.

Grazie per aver letto.

È ansible installare entrambi sullo stesso server, ma è necessario configurarli per utilizzare porte diverse. Entrambi non possono usare la porta 80, almeno non così facilmente.

Tieni presente che Apache è un server e nodeJS è una lingua.

Hai provato a cercare su Google il problema prima di chiedere qui?

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

Di cosa ho bisogno per eseguire uno script node.js sul mio server?

http://www.readwriteweb.com/hack/2010/12/how-to-run-apache-and-nodejs.php

http://eastmond.org/blog/?p=45