Serverele Apache vs Nginx: Dezavantajul acestor două tipuri de servere

Publicat: 2022-01-03

Internetul rulează pe o colecție de servere. Cu toate acestea, acestea au o configurație diferită de cea a unei mașini desktop standard. Un administrator de sistem inteligent sau un dezvoltator back-end va optimiza această alegere pentru nevoile pe care le au. Principala modalitate de a face acest lucru este prin alegerea unui software de server. O comparație populară în acest domeniu este Apache vs Nginx.

Acest lucru se întâmplă din mai multe motive, dar numărul de utilizare și longevitatea sunt două importante. Nginx este mai nou și, probabil, mai capabil pentru standardele web moderne. Cu toate acestea, nici Apache nu trage niciun pumn și este la fel de capabil să ofere site-uri web pentru milioane de utilizatori din întreaga lume.

În această postare, vă vom oferi o comparație între Apache și Nginx. Ne vom uita la elemente la nivel de suprafață, cum ar fi popularitatea ambelor tipuri de servere. Cu toate acestea, vom cerceta și caracteristicile tehnice și considerațiile pentru fiecare. Până la sfârșit, veți ști care sunt dezavantajele ambelor tipuri de software și care este cel mai bun pentru serverul dvs.

Ce sunt Apache și Nginx

Citirea acestui articol înseamnă că probabil înțelegeți că un server web necesită software specializat pentru a oferi performanțe optime. Deși această bucată nu va acoperi ce este sau face software-ul pentru server într-un sens general, vom acoperi două dintre principalele soluții pentru serverul dvs.:

  • Apache. Acesta este un software gratuit și cu sursă deschisă, care vine preinstalat cu majoritatea „distribuțiilor” Linux. Există din 1995 și, datorită acestor doi factori, are o poziție aproape de lider pe piață.
  • Nginx. Deși este un copil relativ în comparație cu alte software-uri de server, Nginx are o mulțime de utilizatori. La scrierea curentă, este aproape în comun cu Apache pentru cel mai popular software de server (din care mai multe mai târziu).

Este demn de remarcat faptul că Apache a fost lider de software pentru server de zeci de ani și a înregistrat o cotă de piață mare pentru acea perioadă. Cu toate acestea, Nginx este acum pe primul loc, deși nu este cu mult.

Un grafic Google Trends care arată Apache vs Nginx.

LEGITARE: Linia albastră de aici de la Google Trends reprezintă căutări pentru Apache din 2004, în timp ce linia roșie se referă la Nginx.

În ceea ce privește ceea ce Apache și Nginx aduc la masă, acest lucru ar putea umple mai multe cărți pe acest subiect. Cu toate acestea, vom încerca să facem acest lucru în mai puțin de 2.000 de cuvinte – începând cu setul de caracteristici generale ale ambelor.

Caracteristicile generale ale Apache și Nginx

Deoarece Apache și Nginx sunt ambele software pentru server web HTTP, veți găsi o mulțime de asemănări. De exemplu, ambele sunt open-source, ceea ce înseamnă că vor funcționa pe o varietate de sisteme. Prin extensie, ambele sunt flexibile și extensibile, dar există obiective diferite pentru fiecare tip de server.

Cu toate acestea, Apache vs Nginx nu este o comparație adevărată, deoarece ambele piese de software abordează procesul de configurare a unui server web într-un mod diferit. În realitate, ambele se vor potrivi mai bine cu diferite aplicații.

În restul acestui articol, vă vom arăta acest lucru printr-o detaliere a detaliilor tehnice pentru Apache și Nginx. Iată ce vom acoperi:

  • O defalcare tehnică a fiecărui tip de software de server, care include gestionarea cererilor și a conexiunilor, tehnologii de stocare în cache și multe altele.
  • Configurarea și extinderea Apache, inclusiv detalii despre fișierul și modulele sale .htaccess .
  • Cum configurați Nginx și extensibilitatea acestuia.

Acest lucru nu pare mult de luat în considerare, dar le puteți despacheta pe fiecare într-o serie de alte sub-secțiuni. Vom face exact asta, începând cu diferențele tehnice.

Diferențele tehnice dintre Apache și Nginx

Într-un sens general, Apache și Nginx iau căi aproape unice și exclusive pentru a atinge același obiectiv al unui server web optim. Dacă le compari pe fiecare într-un mod larg, vei vedea cât de diferite sunt:

  1. Apache folosește o arhitectură „condusă de proces”, în timp ce Nginx folosește una „condusă de evenimente”.
  2. În timp ce ambele tipuri de fișiere statice de server (deși într-un mod diferit), Nginx nu serverează conținut dinamic.
  3. Fiecare tip de software interpretează cererile HTTP într-un mod de bază diferit.

Vom analiza câteva dintre aceste aspecte, începând cu considerațiile legate de gestionarea conexiunii.

Manipularea conexiunii

Veți descoperi că Apache vs Nginx acordă o mare importanță modului în care fiecare tip gestionează conexiunile și solicitările. De exemplu, Apache folosește o abordare bazată pe proces, în care va crea o nouă cerere pentru fiecare fir folosind un modul de procesare numit mpm_prefork . Acest lucru poate fi rapid dacă numărul de solicitări este mai mic decât numărul de procese, dar există o atingere de performanță după aceasta.

De fapt, Apache oferă multă flexibilitate pentru crearea unui algoritm de gestionare a conexiunilor care să se potrivească nevoilor dvs. folosind mpm_prefork , mpm_worker și mpm_event . În schimb, designul lui Nginx este de așa natură încât încearcă să atenueze aspectele negative de performanță pe care le are Apache.

Face acest lucru prin modul în care generează procesele de lucru pe bază de evenimente. Aceasta înseamnă că Nginx este excelent pentru scalare, deoarece poate gestiona mai multe solicitări într-un singur fir.

Solicitați interpretare

Atât Apache, cât și Nginx adoptă, de asemenea, o abordare diferită pentru interpretarea cererilor pe care le va primi un server. De exemplu, Nginx folosește identificatorul uniform de resurse (URI) al unei cereri pentru a o traduce într-un element fizic al sistemului de fișiere.

Puteți vedea acest lucru în formatul unora dintre blocurile de configurare, cum ar fi server și location . Ei lucrează împreună pentru a analiza un URI și a-l transforma în ceva în cadrul sistemului de fișiere.

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

În schimb, rădăcinile lui Apache ca un software de server web „pur” înseamnă că presupune și acționează pe baza faptului că fiecare cerere este o resursă în sistemul de fișiere. Cu toate acestea, Apache poate lucra și cu URI-uri în care cererea este mai abstractă. În ciuda acestui fapt, documentația avertizează împotriva folosirii altora decât metoda bazată pe fișiere.

Performanță statică versus dinamică

Când vine vorba de performanță, Apache vs Nginx este o considerație importantă pentru aproape fiecare utilizator. În context, comparația se rezumă la modul în care fiecare tip de software servește conținut static și dinamic.

Deoarece arhitectura inerentă a lui Apache funcționează cu sistemul de fișiere într-un mod direct, este excelent la difuzarea conținutului static. Cu toate acestea, va procesa și conținut dinamic în cadrul serverului, care este o implementare similară care este, de asemenea, flexibilă dacă trebuie să schimbați modulele în funcție de cerințele pe care le aveți.

În comparație, Nginx nu procesează deloc niciun conținut dinamic. Este mai complicat, deoarece Nginx trebuie să transmită aceste solicitări unui lucrător extern sau unui protocol. Chiar și așa, veți descoperi că există o suprasarcină mai mică de performanță, iar Nginx poate utiliza alte protocoale cu o adaptabilitate mai mare.

Pentru conținutul static, acest lucru poate fi la fel de simplu ca și Apache și, în unele cazuri, o opțiune mai performantă. Acest lucru se datorează faptului că Nginx poate contacta interpretul atunci când este necesar, mai degrabă decât să fie o parte inerentă a performanței generale a software-ului serverului.

Modelul de configurare distribuită al Apache

Nu va fi surprinzător faptul că Apache și Nginx au o abordare diferită a configurației serverului său. Pe scurt, configurația Apache vs Nginx se bazează pe dacă puteți face acest lucru la nivel de director.

Apache folosește un model distribuit, ceea ce înseamnă că puteți configura serverul pe bază de director. Veți face acest lucru prin fișiere .htaccess . Apache va verifica fiecare componentă a căii fișierului solicitat pentru un fișier .htaccess și va executa directivele din interior.

Un fișier .htaccess care arată modulul mod_rewrite împreună cu câteva reguli de rescriere.

În opinia noastră, un fișier .htaccess este mult mai flexibil decât orice alt sistem. Este rapid de găsit, deschis și editat. Puterea pe care o aveți la îndemână de a efectua o mulțime de acțiuni puternice este grandioasă. De asemenea, veți descoperi că un server Apache va procesa un fișier .htaccess ori de câte ori descoperă unul, fără a fi nevoie să reîncărcați serverul.

Este, de asemenea, fantastic dacă trebuie să lăsați unii utilizatori să controleze aspecte ale site-urilor lor, cu impact asupra întregii configurații a serverului. Acesta este motivul pentru care serverele Apache sunt un pilon al platformelor de găzduire partajată, împreună cu sistemul său flexibil de module.

Modulele Apache

Puteți încărca și descărca module pe o bază dinamică folosind Apache. Acest lucru este asemănător cu utilizarea pluginurilor și temelor în WordPress: funcționalitatea de bază Apache realizează pașii fundamentali, în timp ce modulele active vă ajută să creați o experiență unică.

Aceste module pot acoperi mult teren și sunt multe disponibile. Module precum mod_php pot schimba funcționalitatea de bază a serverului, în timp ce popularul mod_rewrite vă permite să efectuați multe alte sarcini:

  • Restricționarea adreselor IP.
  • Schimbarea folderului de acasă pentru site-ul dvs.
  • Efectuarea de redirecționări 301.
  • Setarea unei pagini de start implicite.

Între .htaccess și sistemul de module dinamice, Apache reprezintă o modalitate clară pentru majoritatea utilizatorilor de a modifica și optimiza un server web și un site.

Modelul de configurare centralizată Nginx

Nginx adoptă o abordare centralizată a configurației serverului. Aceasta înseamnă că există un fișier de configurare (se termină cu extensia .conf ). Este uneori dificil de găsit, în funcție de structura serverului dvs.

Acest lucru are câteva dezavantaje clare pentru un proprietar de site în devenire care dorește să facă modificări la un server. Pentru site-urile pe găzduire partajată, este aproape imposibil să configurați serverul. Există, de asemenea, mult mai puțină flexibilitate.

Cu toate acestea, există și câteva avantaje, bazate pe performanță. Deoarece Nginx are o singură locație pentru un fișier de configurare și Apache ar putea folosi mai multe locații, va exista o singură căutare. Prin extensie, va exista mai puțină atingere de performanță pentru a localiza și acel fișier de configurare.

De asemenea, veți descoperi că, deoarece configurația este centrală, proprietarii site-urilor nu vor avea responsabilitatea de a gestiona aspectele legate de securitate. Acesta este un alt avantaj pentru abordarea lui Nginx, deoarece responsabilitatea de securitate revine doar administratorului de sistem.

Modulele lui Nginx

Este corect să spunem că sistemul de module al lui Nginx nu este nici pe departe la fel de permisiv sau flexibil ca Apache, în ciuda faptului că oferă același tip de funcționalitate. De exemplu, luați regulile de redirecționare ale lui Nginx:

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

Acest lucru se datorează faptului că nu le puteți încărca ca elemente dinamice cu Nginx. Pentru a reveni la analogia noastră cu WordPress, este ca și cum ar trebui să reinstalați întregul site pentru a dezactiva un plugin.

La suprafață, acest lucru nu pare funcțional și pare a fi un detriment masiv. Cu toate acestea, ceea ce vă lipsește în flexibilitate, câștigați în stabilitate și funcționalitate de bază. Dacă știți de ce are nevoie serverul dvs. în timpul construirii, puteți include toate aceste componente și module.

Există și un aspect de securitate de luat în considerare. Deoarece nu vei schimba modulele dinamice în și în afara sistemului tău, vei ști ce face și ce poate face fiecare element. Face structura și arhitectura serverului dvs. clare și mai ușor de întreținut, precum și mai performante.

De ce ați folosi fie Apache, fie Nginx

Pentru a rezuma, Apache vs Nginx nu este o decizie clară. Pentru început, opinia tipică că Nginx este mai performant decât Apache este înșelătoare. Dacă configurați bine un server Apache, acesta este la fel de performant ca un server Nginx echivalent.

Apache este excelent pentru a servi atât conținut static, cât și dinamic într-un mod simplu. Oferă o putere imensă pentru cei care nu administrează un server, flexibilitate în configurare. Într-un sens general, veți avea nevoie de mai puține cunoștințe tehnice pentru a configura un server Apache decât Nginx.

Cu toate acestea, performanța este locul în care Nginx strălucește. Configurarea arhitecturii sale asigură că poate realiza mai mult pe ciclu de procesor decât un server Apache. Acest lucru se întâmplă în ciuda flexibilității mai mici în configurare.

În unele cazuri, este posibil să nu puteți alege Apache vs Nginx, mai ales dacă utilizați o gazdă partajată. Cu toate acestea, dacă o faceți, alegerea va depinde de expertiza, obiectivele și nevoile dvs.

rezumat

Alegerea dvs. de software pentru server contează și aveți o mulțime de opțiuni la dispoziție. În realitate, nu veți alege un tip de server din câmpul din stânga. În schimb, veți alege adesea dintre două sau trei tipuri. Apache vs Nginx este o comparație adeseori luată în considerare, deoarece ambele oferă performanțe remarcabile, pe termen lung și fiabilitate.

Acest articol a analizat modul în care Apache vs Nginx se compară pe aceste două fronturi și nu numai. Există o mulțime de considerații tehnice pe care trebuie să le analizați, iar acest lucru va lua în considerare alegerea dvs. mai mult decât cât de popular este un anumit software de server în rândul comunității.

Aveți o părere despre Apache vs Nginx? Împărtășește-ți gândurile cu noi în secțiunea de comentarii de mai jos!