Posso sostituire Apache con Node.js?


151

Ho un sito Web in esecuzione su CentOS utilizzando i soliti sospetti (Apache, MySQL e PHP). Dal momento in cui questo sito web è stato originariamente lanciato, si è evoluto un po 'e ora mi piacerebbe fare cose più fantasiose con esso, vale a dire le notifiche in tempo reale. Da quello che ho letto, Apache lo gestisce male. Mi chiedo se posso sostituire solo Apache con Node.js (quindi invece di " LAMPADA " sarebbe "LNMP").

Ho provato a cercare una soluzione online, ma non ne ho trovata una. Se sto interpretando correttamente le cose che ho letto, sembra che molte persone stiano dicendo che Node.js può sostituire sia Apache che PHP insieme. Ho un sacco di codice PHP esistente, quindi preferirei mantenerlo.

Nel caso in cui non sia già ovvio, sono piuttosto confuso e potrei usare un po 'di illuminazione. Grazie mille!


Potrebbe essere utile esaminare il server delle scimmie.
Prova Harder il

Risposte:


86

Se sei pronto a riscrivere il tuo PHP in JavaScript, quindi Sì, Node.js può sostituire Apache.

Se si inserisce un'istanza Apache o NGINX in esecuzione in modalità proxy inverso tra i server e i client, è possibile gestire alcune richieste in JavaScript su Node.js e alcune richieste nel PHP ospitato da Apache, fino a quando non è possibile sostituire completamente tutto il PHP con codice JavaScript. Questo potrebbe essere il mezzo felice: i tuoi WebSocket funzionano in Node.js, il lavoro più banale in Apache + PHP.


1
Apprezzo la rapida risposta! Nginx è notevolmente superiore ad Apache? Ho già un file .htaccess in atto e sarebbe bello tenerlo. Inoltre, ho letto che è inutile che Apache inoltri richieste a Node.js perché in questo modo stai perdendo i vantaggi di Node.js poiché stai ancora attraversando Apache. Sarebbe meglio avere Node.js in ascolto sulla porta 80 per qualsiasi cosa in una sottocartella denominata "nodejs" e quindi tutto ciò che non si trova in quella sottocartella potrebbe essere passato ad Apache da Node.js? Apache poteva ascoltare su un'altra porta come 8000.
Rick

21
@Rick, sono abbastanza vicino all'eliminazione della mia risposta; Node può essere utilizzatosendfile e esiste un modulo per il supporto FastCGI che potrebbe semplificare anche la gestione di PHP tramite Node. Per quanto riguarda nginx vs Apache, sono sempre stato un fanatico dei server in stile asincrono su server thread o multiprocesso :) ma ho trovato la documentazione di Apache più facile da trovare e leggere. Definirei questa preferenza personale a meno che non sia necessario ridimensionare a numeri sorprendenti. :)
sarnold

3
@Rick Non si desidera migrare elementi di produzione su Node prima di capire di cosa si tratta e come funziona. Node non è una pillola magica per rendere le cose più veloci. Il paradigma basato sugli eventi / asincrono non è nuovo e ci sono ragioni per cui non viene utilizzato per tutto. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar

1
@Rick Invece di pensare che dovresti sostituire quello che hai, forse è meglio eseguire Node in aggiunta. Non pensare che ci sia motivo di passare tutto attraverso il nodo (?), Sembra una cattiva idea. Basta eseguire il nodo su un'altra porta o host.
Øyvind Skaar,

2
@ Øyvind Skaar sono d'accordo. Inoltre, per la maggior parte dei siti Web (ad esempio Wordpress), il vero collo di bottiglia è il database e non l'accesso ai file. E, se l'accesso ai file è un problema, la cache è sempre una soluzione praticabile. Ad ogni modo, per prestazioni reali, PHP-APC è un trucco dannatamente economico.
Magallanes,

26

Node.js potrebbe essere più veloce di Apache grazie alla sua architettura evented / non blocking, ma potresti avere problemi a trovare moduli / librerie che sostituiscono alcune funzionalità di Apache.

Node.js stesso è un framework di basso livello leggero che ti consente di creare roba lato server e parti in tempo reale relativamente alle tue applicazioni web, ma Apache offre opzioni di configurazione molto più ampie e funzionalità "classiche" orientate al web server.

Direi che a meno che tu non voglia sostituire PHP con framework di applicazioni web basato su node.js come express.js, dovresti rimanere con Apache (o pensare a migrare su Nginx se hai problemi di prestazioni).


11

Credo che Node.js sia il futuro del servizio web, ma se hai un sacco di codice PHP esistente, Apache / MySQL sono la soluzione migliore. Apache può essere configurato per inoltrare richieste a Node.js o Node.js può inoltrare richieste a Apache, ma credo che in entrambi i casi si perdano alcune prestazioni, specialmente nel primo. Non è un grosso problema se non stai gestendo un sito Web con traffico molto elevato.

Mi sono appena registrato su StackOverflow e non posso ancora commentare la risposta accettata, ma oggi ho creato un semplice script Node.js che utilizza effettivamente sendfile () per servire i file attraverso il protocollo HTTP. (L'esempio esistente a cui la risposta accettata si collega utilizza solo il protocollo TCP nudo per inviare il file e non sono riuscito a trovare un esempio per HTTP, quindi l'ho scritto da solo.)

Quindi ho pensato che qualcuno potesse trovarlo utile. Servire i file attraverso la chiamata del sistema operativo sendfile () non è necessariamente più veloce di quando i dati vengono copiati attraverso "user land", ma finisce per utilizzare meno CPU e RAM, potendo così gestire un numero maggiore di connessioni rispetto al modo classico.

Il link: https://gist.github.com/1350901


2
Anche se è molto vero, credo ancora che se hai rimosso Apache facendo esattamente quello che stai descrivendo, funzionerebbe più veloce e, se non, più veloce di node.js. Apache fa molte cose che le persone non vedono o capiscono davvero e se aggiungessi tutte le funzionalità di questi server Web a node.js, funzionerebbe altrettanto lentamente di loro. Come semplice esempio sarebbe probabilmente, mynode.js / getfile? File = / etc / shadow
Rahly

8

Post SO precedente che descrivono esattamente cosa sto dicendo (php + socket.io + node)

Penso che potresti creare un server nodo su somehost: 8000 con socket.io e schiaffeggiare il codice client socket.io in tag e con il minimo lavoro far oscillare la tua app esistente con socket.io (realtime baby) senza un sacco di lavoro.

Mentre il nodo può essere il tuo unico server back-end, ricorda che al nodo piace vivere fino al suo nome e diventare un nodo. Ho verificato un discorso qualche tempo fa che Ryan Dahl ha tenuto a un gruppo di utenti PHP e ha menzionato il nodo del nome relativo a una visione di diversi processi di nodo che fanno lavoro e parlano tra loro.


2

La sua LAMPADA contro MEAN al giorno d'oggi. Per un confronto diretto vedi http://tamas.io/what-is-the-mean-stack .

Naturalmente M, E e A sono alquanto variabili. Ad esempio il koa più recente può sostituire (E) xpress.

Tuttavia, sostituire semplicemente Apache con Node.js non è probabilmente il modo giusto per modernizzare il tuo stack web.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.