Quando devo passare a NGinx?

Ho un server con diversi domini e applicazioni in esecuzione, tutto attraverso Apache. Tutto è ben in questo momento, ma ho intenzione di sviluppare un'applicazione web molto intensa (utilizzando C ++ con CPPCMS), a partire dal mio server per il test, forse per get un server separato solo per questa applicazione una volta che si prepara.

In each modo, ho sentito molto su NGinx, che sembra essere più performante di Apache, quindi mi sono chiesto se vale la pena lavorare per questo nuovo progetto. Non è chiaro nella mia mente perché non so quale tipo di performance NGinx fissa veramente esattamente.

Non sono un potere di Apache, sono un amministratore Linux povero e non sviluppo molto le applicazioni web (ma ho nozioni). Sono principalmente dedicato al software di scrittura in modo che la parte del server web a volte è molto oscuro per me. Ogni volta che devo configurare un sito web attraverso apach, ho bisogno di un sacco di tempo di navigazione nel documento per assicurarmi di non rompere tutto.

Detto questo, penso che sto ottenendo molto meglio da questo lato ma ho ancora bisogno di consigli. Ho visto alcuni file di configuration nginx in giro, e questo sembra molto più comprensibile degli Apache, ma forse sono sbagliato?

Dalle informazioni che ho raccolto, NGinx sarebbe la scelta migliore quando si desidera il bilanciamento del carico, quindi se hai la tua applicazione diffusa su più macchine, giusto? Mentre sto pensando alla mia domanda di scalling (e performance), sembra che sia quello di cui ho bisogno, ma forse devo sapere altre cose su quando è interessante muoversi da Apache a NGinx. Vale la pena di passare a NGinx anche per tutte le mie applicazioni correnti? Quanto costa? (Voglio dire, è costoso in tempo per passare da uno all'altro?) Posso usare Apache e NGinx sia sulla stessa macchina senza alcun problema?

Nota laterale : per favore non chiedere di utilizzare linguaggi interpretati invece di C ++, non è correlato alla domanda. Vedere la pagina di riferimento del CPPCSM per vedere quale tipo di applicazione può beneficiare di esso. Capisco perfettamente gli inconvenienti (rispetto alle applicazioni in Ruby e Python, che già utilizzo per applicazioni web less affamate di potenza) e sono bene con esso.

  • NGINX: Molti collegamenti hanno risolto gli errori
  • Nginx + Php5-fpm non rendere i file php
  • php-fpm usa un sacco di CPU
  • Heartbleed, quali servizi specifici devono essere riavviati?
  • chi dovrebbe possedere la radice web del mio server?
  • nginx - quale modo è meglio redirect e perché
  • Con Nginx proxy a Apache, il nome host reale viene perso
  • Forzare Nginx per submit le intestazioni Content-Length quando si servono file statici con gzip
  • 3 Solutions collect form web for “Quando devo passare a NGinx?”

    Diversi punti:

    La principale differenza tra Apache e Nginx o Lighttpd (che mi piace molto personalmente) è l'architettura:

    1. Apache gestisce una connessione per process o per-thread (a seconda di mod-XYZ)
    2. Nginx e Lighttpd sono singoli threaded gestiscono più connessioni nel singolo loop di events.

    Di conseguenza:

    1. Supponiamo che Nginx e Lighttpd possano essere molto meglio sotto un elevato numero di connessioni simultanee, ad esempio con 1000 collegamenti che Apache sarebbe quasi morto in quanto richiederebbe 1000 processi in mod-prefork o 1000 thread in mod-worker.

      Se si prevede di utilizzare le tecnologie Comet, in cui each connessione richiede una connessione HTTP di lunga interrogazione, Apache non sarebbe accettabile poiché non si scala bene.

    2. Nginx e Lighttpd consumano less memory in quanto each connessione richiede + – due socket (HTTP e FastCGI), buffer di memory intermedia e qualche stato, mentre Apache avrebbe bisogno di un integer thread, incluso lo stack e altre cose.

    Dalla mia esperienza personale nei parametri di riferimento ho fatto Lighttpd (e suppongo anche Nginx) sia leggermente più veloce con FastCGI backend poi Apache, ma questo è per una bassa quantità di connessioni.

    Ora un altro punto è quando si desidera eseguire alcuni bilanci di carico utilizzando le connessioni FastCGI.

    Nell'architettura tradizionale c'è

    | HTTP | Balancer (Nginx/Lighttpd/Cherooke/something-else) / | | | \ HTTP HTTP HTTP HTTP HTTP / | | | \ Apache+PHP Apache+PHP Apache+PHP Apache+PHP Apache+PHP Server 2 Server 3 Server 4 Server 5 Server 6 

    Poiché Apache gestisce pool di processi ciascuno di essi che eseguono mod-PHP (o altri modi)

    Quando si utilizza CppCMS che gestisce le piscine da solo, è ansible fare qualcosa di diverso:

      | HTTP | Balancer (Nginx/Lighttpd/Cherooke/something-else) Server 1 / | | | \ FCGI FCGI FCGI FCGI FCGI / | | | \ CppCMS App CppCMS App CppCMS App CppCMS App CppCMS App Server 2 Server 3 Server 4 Server 5 Server 6 

    Quindi fondamentalmente non hai bisogno di un altro livello di indirizzi perché CppCMS gestisce il process, il thread e il pool di connessione per te. Mentre PHP / Ruby / Perl necessita di qualche Apache mod-XYZ o gestisce il proprio connettore FastCGI.

    Nginx, parlando molto ( molto ) in generale, può get un rendimento molto maggiore di Apache grazie ad un diverso approccio architettonico al problema della pubblicazione di pagine al web. Nginx è stato anche costruito principalmente come proxy inverso e riempie questo ruolo eccezionalmente bene (questo è il bit di bilanciamento del carico che hai alluso); D'altra parte, Apache è stato costruito per servire pagine web e successivamente ha acquisito la capacità di proxy.

    Detto questo, ci sono quasi certamente le aree che Apache continueranno a superare Nginx, mentre ci sono altri where Nginx sarà altrettanto sovraperformante di Apache.

    La breve risposta è che se Apache sta lavorando per te, non c'è bisogno di passare. (E io lo dico come un ex utente di Apache che è diventato un discepolo Nginx completamente convertito.) Solo quando il traffico verso il tuo server inizia a raggiungere livelli in cui Apache sta diventando il tuo collo di bottiglia (questo è l'ordine di alcune migliaia di connessioni simultanee, ma varia in maniera selvaggia in base alle specifiche del server e ad altri server) o se stai tentando di eseguire Apache in un ambiente povero di risorse in cui è difficile adattarsi, il passaggio a Nginx ti dà un beneficio solido.

    Detto questo, se volete passare a Nginx (che incoraggio!), Allora andate a farlo. Vedrai qualunque beneficio? 9 volte su 10: No, non lo farai. Ma hai detto che ti piace il linguaggio del file di configuration di Nginx meglio, quindi se ti fa sentire più a tuo agio per configurare Nginx che Apache, beh, questo è un beneficio per te! (Personalmente, le configurazioni di Apache sono più facili da leggere in generale, ma potrebbe essere perché ho trascorso molti e molti anni a leggerli e solo pochi mesi sono stati spesi su Nginx!)

    Su una nota laterale: Hai citato la tua voglia di build un'app web in C + +. A causa della tua sanità, vi esorto fortemente a utilizzare un linguaggio di livello superiore come PHP, Python o addirittura Java. Poi proporre il tuo codice e considerare la creazione di moduli basati su C ++ per affrontare gravi strozzature (Python e PHP lo consentono piuttosto facilmente, non conoscono Java). Se sei preoccupato per le performance globali, consideri questo: EVE Online, il più grande MMORPG non singolo di tutto il mondo, è basato su una variante di Python (Stackless Python), con solo componenti chiave (ad esempio le librerie grafiche) scritte in C ++. Se Python può gestire questo problema, è sicuramente in grado di gestire l'applicazione Web?

    Nessuno può veramente rispondere alla "quando devo cambiare" parte – dipenderà dal tuo carico, dalle performance del proprio codice applicativo, ecc.

    NGinx, che sembra essere più performante di Apache

    nginx utilizza un singolo process (o un numero molto piccolo di processi lavorativi) per gestire tutte le connessioni client usando gli I / O eventuali. Apache dispone di diversi "Moduli di Multi-Processing" disponibili, ma tutti si allungano verso molti molti processi / molti thread. Di conseguenza, Apache generalmente consumerà più RAM e CPU rispetto a nginx per la gestione dei collegamenti HTTP di base. È ansible get una panoramica dei diversi approcci di gestione delle connessioni sulla pagina C10K di Kegel .

    un'applicazione web molto performante (utilizzando C ++ con CPPCMS)

    Suggeriamo vivamente di considerare l'applicazione webap di base in un linguaggio di livello superiore (Python, o forse Ruby, Scala) e utilizzare una coda di messaggistica per submit biglietti di lavoro a macchine per lavoratori che gestiscono in modo asincrono le attività "performative-intensive".

    NGinx sarebbe la scelta migliore quando si desidera bilanciare il carico,

    nginx è un buon bilanciatore di carico; ma ci sono molte opzioni in quel spazio .

    Posso utilizzare Apache e NGinx sia sulla stessa macchina senza alcun problema?

    Sì. Basta eseguirli su diversi numbers di port IP e / o indirizzi IP.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.