Kāpēc man šķiet, ka Nginx ir praktiski labāks par Apache


Saskaņā ar Netcraft jaunāko tīmekļa serveru aptauju, kas tika veikta 2017. gada beigās (tieši novembrī), Apache un Nginx ir visplašāk izmantotie atvērtā koda tīmekļa serveri internetā.

Apache ir bezmaksas, atvērtā koda HTTP serveris Unix līdzīgām operētājsistēmām un Windows. Tas tika izstrādāts kā drošs, efektīvs un paplašināms serveris, kas nodrošina HTTP pakalpojumus sinhronizācijā ar dominējošajiem HTTP standartiem.

Kopš tā izlaišanas Apache ir bijis vispopulārākais tīmekļa serveris internetā kopš 1996. gada. Tas ir faktiskais tīmekļa serveru standarts Linux un atvērtā pirmkoda ekosistēmā. Jaunajiem Linux lietotājiem parasti ir vieglāk iestatīt un lietot.

Nginx (izrunā ‘Engine-x’) ir bezmaksas, atvērtā koda, augstas veiktspējas HTTP serveris, apgrieztais starpniekserveris un IMAP/POP3 starpniekserveris. Tāpat kā Apache, tā darbojas arī ar Unix līdzīgām operētājsistēmām un Windows.

Labi pazīstams ar augstu veiktspēju, stabilitāti, vienkāršu konfigurāciju un zemu resursu patēriņu. Tas gadu gaitā ir kļuvis tik populārs, un tā izmantošana internetā virzās uz lielāku augstumu. Tagad tas ir izvēlētais tīmekļa serveris pieredzējušu sistēmu administratoru vai populārāko vietņu tīmekļa meistaru vidū.

Dažas no aizņemtajām vietnēm nodrošina:

  • Apache ir: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com un vēl daudz vairāk.
  • Nginx ir: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud un daudzi citi.

Tīmeklī jau ir publicēti daudzi resursi par Apache un Nginx salīdzināšanu (es tiešām domāju "Apache Vs Nginx" rakstus), no kuriem daudzi skaidri un detalizēti izskaidro to galvenās iezīmes un darbības dažādos scenārijos, tostarp veiktspējas rādītājus laboratorijas etalonos. . Tāpēc tas šeit netiks apskatīts.

Es vienkārši dalīšos savā pieredzē un pārdomās par visām debatēm, nākamajā sadaļā izmēģinot Apache un Nginx, gan ražošanas vidēs, gan balstoties uz mūsdienu tīmekļa lietojumprogrammu mitināšanas prasībām.

Iemesli, kāpēc man šķiet, ka Nginx ir praktiski labāks par Apache

Tālāk ir norādīti iemesli, kāpēc modernai tīmekļa satura piegādei es dodu priekšroku Nginx tīmekļa serverim, nevis Apache:

Nginx ir viens no vieglajiem tīmekļa serveriem. Tam ir nelieli nospiedumi sistēmā, salīdzinot ar Apache, kas īsteno plašu funkcionalitāti, kas nepieciešama lietojumprogrammas darbināšanai.

Tā kā Nginx apkopo nedaudzas pamatfunkcijas, tā paļaujas uz īpašiem trešo pušu augšpusē esošajiem tīmekļa serveriem, piemēram, Apache aizmuguri, FastCGI, Memcached, SCGI un uWSGI serveriem vai lietojumprogrammu serveriem, ti, valodas specifiskiem serveriem, piemēram, Node.js, Tomcat utt.

Tāpēc tā atmiņas izmantošana ir daudz labāk piemērota ierobežotai resursu izvietošanai nekā Apache.

Atšķirībā no Apache vītņotās vai uz procesu orientētās arhitektūras (process-per-connection vai thread-per-connection model), Nginx izmanto mērogojamu, notikumu virzītu (asinhrono) arhitektūru. Tajā tiek izmantots atbildīgs procesa modelis, kas pielāgots pieejamajiem aparatūras resursiem.

Tam ir pamatprocess (kas veic tādas priviliģētas darbības kā konfigurācijas nolasīšana un saistīšana ar ostām) un kas rada vairākus darbinieku un palīgu procesus.

Darba ņēmēja procesi var vienlaikus apstrādāt tūkstošiem HTTP savienojumu, lasīt un rakstīt saturu diskā un sazināties ar augšupējiem serveriem. Palīgprocesi (kešatmiņas pārvaldnieks un kešatmiņas ielādētājs) var pārvaldīt diska satura kešatmiņas darbības.

Tas padara tās darbību mērogojamu un nodrošina augstu veiktspēju. Šī dizaina pieeja vēl vairāk padara to ātru, labvēlīgu mūsdienu lietojumiem. Turklāt trešo pušu moduļus var izmantot, lai paplašinātu vietējās Nginx funkcijas.

Nginx ir vienkārša konfigurācijas faila struktūra, padarot to ļoti viegli konfigurējamu. Tas sastāv no moduļiem, kurus kontrolē konfigurācijas failā norādītās direktīvas. Turklāt direktīvas ir sadalītas bloku direktīvās un vienkāršās direktīvās.

Bloķēšanas direktīvu nosaka iekavas ( { un } ). Ja bloķēšanas direktīvā iekavās var būt citas direktīvas, to sauc par kontekstu, piemēram, notikumi, http, serveris un atrašanās vieta.

http {
	server {
		
	}
}

Vienkārša direktīva sastāv no nosaukuma un parametriem, kas atdalīti ar atstarpēm, un beidzas ar semikolu (;) .

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Varat iekļaut pielāgotus konfigurācijas failus, izmantojot, piemēram, iekļaut direktīvu.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Praktisks piemērs man bija tas, kā man izdevās viegli konfigurēt Nginx, lai palaistu vairākas vietnes ar dažādām PHP versijām, kas ar Apache bija neliels izaicinājums.

Viens no izplatītākajiem Nginx lietojumiem ir tā iestatīšana kā starpniekserveris, šajā gadījumā tas saņem HTTP pieprasījumus no klientiem un pārsūta tos iepriekš minētajiem starpniekserveriem vai augšupējiem serveriem, izmantojot dažādus protokolus. Varat arī modificēt klienta pieprasījuma galvenes, kas tiek sūtītas uz starpniekserveri, un konfigurēt buferi atbildēm, kas nāk no starpniekserveriem.

Tad tā saņem atbildes no tuvinātajiem serveriem un nodod tās klientiem. To ir vieglāk konfigurēt kā starpniekserveri, salīdzinot ar Apache, jo nepieciešamie moduļi lielākajā daļā gadījumu ir iespējoti pēc noklusējuma.

Statiskais saturs vai faili parasti ir servera datora diskā saglabāti faili, piemēram, CSS faili, JavaScripts faili vai attēli. Apsvērsim scenāriju, kurā Nginx izmantojat kā Nodejs (lietojumprogrammu servera) priekšgali.

Neskatoties uz to, ka Nodejs serverī (īpaši Node ietvaros) ir iebūvētas funkcijas statiskai failu apstrādei, tiem nav jāveic intensīva apstrāde, lai piegādātu nedinamisku saturu, tāpēc ir praktiski izdevīgi konfigurēt tīmekļa serveri tā, lai tas statisko saturu apkalpotu tieši klientiem.

Nginx var veikt daudz labāku darbu, apstrādājot statiskos failus no noteikta direktorija, un var novērst statisko aktīvu pieprasījumu nosmakšanu augšpus servera procesos. Tas ievērojami uzlabo aizmugures serveru kopējo veiktspēju.

Lai realizētu modernu tīmekļa lietojumprogrammu augstu veiktspēju un darbības laiku, var būt nepieciešams palaist vairākus lietojumprogrammu gadījumus vienā vai sadalītā HTTP serverī. Tas savukārt var būt nepieciešams iestatīt slodzes līdzsvarošanu, lai sadalītu slodzi starp jūsu HTTP serveriem.

Mūsdienās slodzes līdzsvarošana ir kļuvusi par plaši izmantotu pieeju operētājsistēmas resursu izmantošanas optimizēšanai, elastības maksimizēšanai, latentuma samazināšanai, caurlaides palielināšanai, atlaišanas panākšanai un kļūdām tolerantu konfigurāciju izveidošanai - vairākos lietojuma gadījumos.

Nginx izmanto šādas slodzes līdzsvarošanas metodes:

  • apļveida pārbaude (noklusējuma metode) - pieprasījumi augšpusē esošajiem serveriem tiek sadalīti pēc kārtas (secībā pēc augšpusējā baseina esošo serveru saraksta).
  • vismazāk savienots - šeit nākamais pieprasījums tiek tuvināts serverim ar vismazāko aktīvo savienojumu skaitu.
  • ip-hash - šeit hash-funkcija tiek izmantota, lai noteiktu, kurš serveris jāizvēlas nākamajam pieprasījumam (pamatojoties uz klienta IP adresi).
  • Vispārīga jaukšana - saskaņā ar šo metodi sistēmas administrators norāda jaucējkrātu (vai atslēgu) ar norādīto tekstu, pieprasījuma vai izpildlaika mainīgajiem lielumiem vai to kombināciju. Piemēram, atslēga var būt avota IP un ports vai URI. Pēc tam Nginx sadala slodzi starp augšpusē esošajiem serveriem, ģenerējot pašreizējam pieprasījumam jaucējkrāsu un novietojot to pret augšupējiem serveriem.
  • Vismazākais laiks (Nginx Plus) - nākamo pieprasījumu piešķir augšteces serverim ar vismazāko pašreizējo savienojumu skaitu, bet atbalsta serverus ar zemāko vidējo reakcijas laiku.

Turklāt Nginx ir ļoti mērogojama un moderna tīmekļa lietojumprogramma, jo īpaši uzņēmumu lietojumprogrammu pieprasījums pēc tehnoloģijām, kas nodrošina augstu veiktspēju un mērogojamību.

Viens uzņēmums, kas gūst labumu no Nginx apbrīnojamām mērogojamības funkcijām, ir CloudFlare, tam ir izdevies mērogot savas tīmekļa lietojumprogrammas, lai apstrādātu vairāk nekā 15 miljardus ikmēneša lapu skatījumu ar salīdzinoši pieticīgu infrastruktūru, norāda Matthew Prince, CloudFare līdzdibinātājs un izpilddirektors.

Lai iegūtu plašāku skaidrojumu, skatiet šo rakstu emuārā Nginx: NGINX pret Apache: mūsu viedoklis par gadu desmitiem vecu jautājumu.

Gan Apache, gan Nginx nevar aizstāt viens ar otru, viņiem ir savas stiprās un vājās puses. Tomēr Nginx piedāvā spēcīgu, elastīgu, mērogojamu un drošu tehnoloģiju, lai droši un efektīvi darbinātu modernas vietnes un tīmekļa lietojumprogrammas. Kāds ir jūsu viedoklis? Informējiet mūs, izmantojot tālāk sniegto atsauksmju veidlapu.