De ce găsesc Nginx practic mai bun decât Apache
Potrivit celui mai recent sondaj de web server realizat de Netcraft, care a fost realizat spre sfârșitul anului 2017, (mai exact în noiembrie), Apache și Nginx sunt cele mai utilizate servere web open source de pe Internet.
Apache este un server HTTP gratuit, open-source, pentru sisteme de operare asemănătoare Unix și Windows. A fost conceput pentru a fi un server sigur, eficient și extensibil, care oferă servicii HTTP sincronizate cu standardele HTTP dominante.
Încă de la lansare, Apache a fost cel mai popular server web de pe Internet din 1996. Este standardul de facto pentru serverele web din ecosistemul Linux și open source. Utilizatorii noi de Linux consideră că este mai ușor de configurat și utilizat.
Nginx (pronunțat „Engine-x”) este un server HTTP gratuit, open source, de înaltă performanță, proxy invers și un server proxy IMAP/POP3. La fel ca Apache, rulează și pe sisteme de operare asemănătoare Unix și Windows.
Cunoscut pentru performanța înaltă, stabilitatea, configurația simplă și consumul redus de resurse, a devenit de-a lungul anilor atât de popular, iar utilizarea sa pe Internet se îndreaptă spre înălțimi mai mari. Acum este serverul web ales printre administratorii de sistem experimentați sau masterii web ai site-urilor de top.
Unele dintre site-urile aglomerate oferite de:
- Apache sunt: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com și multe altele.
- Nginx sunt: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud și multe altele.
Există numeroase resurse deja publicate pe web referitoare la comparația dintre Apache și Nginx (ma refer la articolele „Apache Vs Nginx”), multe dintre care explică clar în detaliu, caracteristicile și operațiunile lor de top în diferite scenarii, inclusiv măsuri de performanță în benchmark-uri de laborator. Prin urmare, acest lucru nu va fi abordat aici.
Pur și simplu voi împărtăși experiența și gândurile mele despre întreaga dezbatere, după ce am încercat Apache și Nginx, ambele în medii de producție bazate pe cerințele pentru găzduirea aplicațiilor web moderne, în următorul secțiune.
Motive pentru care găsesc Nginx practic mai bun decât Apache
Următoarele sunt motivele pentru care prefer serverul web Nginx decât Apache pentru livrarea modernă de conținut web:
1. Nginx este ușor
Nginx este unul dintre serverele web cu greutate redusă. Are amprente mici pe un sistem în comparație cu Apache, care implementează o gamă largă de funcționalități necesare rulării unei aplicații.
Deoarece Nginx reunește o serie de caracteristici de bază, se bazează pe servere web dedicate terțe părți, cum ar fi un backend Apache, FastCGI, Memcached, SCGI și servere uWSGI sau server de aplicații, adică servere specifice limbii, cum ar fi Node.js, Tomcat , etc.
Prin urmare, utilizarea sa de memorie este mult mai potrivită pentru implementările de resurse limitate decât Apache.
2. Nginx este proiectat pentru concurență ridicată
Spre deosebire de arhitectura Apache orientată pe fire sau pe proces (model proces-pe-conexiune sau fir-pe-conexiune), Nginx folosește o arhitectură scalabilă, bazată pe evenimente (asincronă). Utilizează un model de proces responsabil, care este adaptat resurselor hardware disponibile.
Are un proces principal (care realizează operațiunile privilegiate, cum ar fi citirea configurației și legarea la porturi) și care creează mai multe procese de lucru și de ajutor.
Procesele de lucru pot gestiona fiecare mii de conexiuni HTTP simultan, pot citi și scrie conținut pe disc și pot comunica cu serverele din amonte. Procesele de ajutor (managerul cache și încărcătorul cache) pot gestiona operațiunile de stocare în cache a conținutului de pe disc.
Acest lucru face ca operațiunile sale să fie scalabile și rezultând performanțe ridicate. Această abordare de proiectare îl face mai rapid, favorabil pentru aplicațiile moderne. În plus, modulele terțe pot fi folosite pentru a extinde funcționalitățile native din Nginx.
3. Nginx este ușor de configurat
Nginx are o structură simplă a fișierelor de configurare, ceea ce îl face foarte ușor de configurat. Este format din module care sunt controlate de directivele specificate în fișierul de configurare. În plus, directivele sunt împărțite în directive bloc și directive simple.
O directivă de bloc este definită prin acolade ({
și }
). Dacă o directivă de bloc poate avea alte directive în acolade, se numește context, cum ar fi evenimente, http, server și locație.
http {
server {
}
}
O directivă simplă constă din nume și parametri separați prin spații și se termină cu punct și virgulă (;)
.
http {
server {
location / {
## this is simple directive called root
root /var/www/hmtl/example.com/;
}
}
}
Puteți include fișiere de configurare personalizate folosind directiva include, de exemplu.
http {
server {
}
## examples of including additional config files
include /path/to/config/file/*.conf;
include /path/to/config/file/ssl.conf;
}
Un exemplu practic pentru mine a fost modul în care am reușit să configurez cu ușurință Nginx pentru a rula mai multe site-uri web cu diferite versiuni PHP, ceea ce a fost o mică provocare cu Apache.
4. Nginx este un proxy frontend excelent
Una dintre utilizările obișnuite ale Nginx este configurarea acestuia ca server proxy, în acest caz, primește solicitări HTTP de la clienți și le transmite serverelor proxy sau upstream care au fost menționate mai sus, prin diferite protocoale. De asemenea, puteți modifica anteturile cererilor client care sunt trimise către serverul proxy și puteți configura tamponarea răspunsurilor care vin de la serverele proxy.
Apoi primește răspunsuri de la serverele proxy și le transmite clienților. Este mult mai ușor de configurat ca server proxy în comparație cu Apache, deoarece modulele necesare sunt în majoritatea cazurilor activate implicit.
5. Nginx este remarcabil pentru difuzarea conținutului static
Conținutul sau fișierele static sunt de obicei fișiere stocate pe disc pe computerul server, de exemplu fișiere CSS, fișiere JavaScript sau imagini. Să luăm în considerare un scenariu în care utilizați Nginx ca frontend pentru Nodejs (serverul de aplicații).
Deși serverul Nodejs (în special cadrele Node) au caracteristici încorporate pentru gestionarea fișierelor statice, nu trebuie să facă o procesare intensivă pentru a furniza conținut non-dinamic, prin urmare este practic benefic să configurați serverul web pentru a servi conținut static direct către clientii.
Nginx poate efectua o muncă mult mai bună de a gestiona fișierele statice dintr-un anumit director și poate împiedica cererile de active statice să înăbușe procesele serverului din amonte. Acest lucru îmbunătățește semnificativ performanța generală a serverelor backend.
6. Nginx este un echilibrator de sarcină eficient
Pentru a obține performanță ridicată și timp de funcționare pentru aplicațiile web moderne, poate fi necesar să rulați mai multe instanțe de aplicație pe un singur server HTTP sau distribuit. Acest lucru poate necesita, la rândul său, configurarea echilibrării încărcării pentru a distribui sarcina între serverele dvs. HTTP.
Astăzi, echilibrarea încărcăturii a devenit o abordare utilizată pe scară largă pentru optimizarea utilizării resurselor sistemului de operare, maximizarea flexibilității, reducerea latenței, creșterea debitului, obținerea redundanței și stabilirea de configurații tolerante la erori – în mai multe instanțe de aplicație.
Nginx folosește următoarele metode de echilibrare a sarcinii:
- round-robin (metoda implicită) – solicitările către serverele din amonte sunt distribuite într-o manieră round-robin (în ordinea listei de servere din pool-ul din amonte).
- cel mai puțin conectat – aici următoarea solicitare este trimisă serverului cu cel mai mic număr de conexiuni active.
- ip-hash – aici este folosită o funcție hash pentru a determina ce server ar trebui să fie selectat pentru următoarea solicitare (pe baza adresei IP a clientului).
- Hash generic – în cadrul acestei metode, administratorul de sistem specifică un hash (sau cheie) cu textul dat, variabilele cererii sau ale timpului de execuție sau combinația acestora. De exemplu, cheia poate fi un IP și un port sursă sau URI. Nginx distribuie apoi sarcina între serverele din amonte generând un hash pentru cererea curentă și plasându-l pe serverele din amonte.
- Timp minim (Nginx Plus) – atribuie următoarea solicitare serverului din amonte cu cel mai mic număr de conexiuni curente, dar favorizează serverele cu cei mai mici timpi medii de răspuns.
7. Nginx este foarte scalabil
În plus, Nginx este aplicații web extrem de scalabile și moderne, în special aplicațiile de întreprindere care solicită tehnologie care oferă performanță și scalabilitate ridicate.
O companie care beneficiază de caracteristicile uimitoare de scalabilitate ale Nginx este CloudFlare, care a reușit să-și extindă aplicațiile web pentru a gestiona peste 15 miliarde de vizualizări lunare de pagini cu o infrastructură relativ modestă, potrivit Matthew Prince., co-fondator și CEO al CloudFare.
Pentru o explicație mai cuprinzătoare, consultați acest articol pe blogul Nginx: NGINX vs. Apache: Our View of a Decade-Old Question.
Concluzie
Atât Apache cât și Nginx nu pot fi înlocuite unul de celălalt, au punctele lor tari și slabe. Cu toate acestea, Nginx oferă o tehnologie puternică, flexibilă, scalabilă și sigură pentru a alimenta în mod fiabil și eficient site-urile web și aplicațiile web moderne. Ce părere aveți? Anunțați-ne prin formularul de feedback de mai jos.