Miksi Nginx on käytännössä parempi kuin Apache


Netcraftin viimeisimmän verkkopalvelintutkimuksen mukaan, joka tehtiin vuoden 2017 loppupuolella (tarkalleen marraskuussa), Apache ja Nginx ovat yleisimmin käytettyjä avoimen lähdekoodin verkkopalvelimia Internetissä.

Apache on ilmainen, avoimen lähdekoodin HTTP-palvelin Unix-tyyppisille käyttöjärjestelmille ja Windowsille. Se on suunniteltu turvalliseksi, tehokkaaksi ja laajennettavaksi palvelimeksi, joka tarjoaa HTTP-palveluja synkronoituna vallitsevien HTTP-standardien kanssa.

Siitä lähtien, kun se on julkaistu, Apache on ollut Internetin suosituin verkkopalvelin vuodesta 1996 lähtien. Se on de facto -standardi verkkopalvelimille Linuxissa ja avoimen lähdekoodin ekosysteemissä. Uusien Linux-käyttäjien on yleensä helpompi asentaa ja käyttää.

Nginx (lausutaan nimellä 'Engine-x') on ilmainen, avoimen lähdekoodin, erittäin suorituskykyinen HTTP-palvelin, käänteinen välityspalvelin ja IMAP/POP3-välityspalvelin. Aivan kuten Apache, se toimii myös Unix-tyyppisissä käyttöjärjestelmissä ja Windowsissa.

Korkeasta suorituskyvystä, vakaudesta, yksinkertaisesta kokoonpanosta ja vähäisestä resurssien kulutuksesta tunnettu se on vuosien varrella tullut niin suosituksi ja sen käyttö Internetissä on nousemassa. Se on nyt valittu verkkopalvelin kokeneiden järjestelmänvalvojien tai suosituimpien sivustojen päälliköiden keskuudessa.

Jotkut kiireisistä sivustoista tarjoavat:

  • Apache ovat: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com ja paljon muuta.
  • Nginx ovat: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud ja monet muut.

Verkossa on jo julkaistu lukuisia resursseja, jotka koskevat Apache ja Nginx -vertailua (tarkoitan todella Apache Vs Nginx -artikkeleita), joista monet selittävät selkeästi yksityiskohtiin, niiden tärkeimmät ominaisuudet ja toiminnot eri skenaarioissa, mukaan lukien suorituskyvyn mittaukset laboratorion vertailuarvoissa . Siksi sitä ei käsitellä tässä.

Jaan seuraavassa osassa yksinkertaisesti kokemukseni ja ajatukseni koko keskustelusta, kun olen kokeillut Apache- ja Nginx-ohjelmia sekä tuotantoympäristöissä, jotka perustuvat moderneiden verkkosovellusten isännöintivaatimuksiin.

Syitä miksi pidän Nginxiä käytännössä parempana kuin Apache

Seuraavassa on syitä, miksi pidän Nginx-verkkopalvelinta Apache: n sijaan nykyaikaisessa verkkosisällön toimituksessa:

Nginx on yksi kevyistä verkkopalvelimista. Sillä on pienet jalanjäljet järjestelmässä verrattuna Apache-järjestelmään, joka toteuttaa sovelluksen suorittamiseen tarvittavan laajan toiminnallisuuden.

Koska Nginx kokoaa yhteen kourallisen ydinominaisuuksia, se luottaa omistettuihin kolmannen osapuolen ylävirran web-palvelimiin, kuten Apache-backend, FastCGI, Memcached, SCGI ja uWSGI-palvelimet tai sovelluspalvelin, eli kielikohtaiset palvelimet, kuten Node.js, Tomcat , jne.

Siksi sen muistin käyttö soveltuu paljon paremmin rajoitettuun resurssien käyttöönottoon kuin Apache.

Päinvastoin kuin Apachen kierteitettyyn tai prosessisuuntautuneeseen arkkitehtuuriin (prosessi/yhteys tai ketju/yhteys-malli), Nginx käyttää skaalautuvaa, tapahtumapohjaista (asynkronista) arkkitehtuuria. Se käyttää vastuullista prosessimallia, joka on räätälöity käytettävissä oleville laitteistoresursseille.

Sillä on pääprosessi (joka suorittaa etuoikeutetut toiminnot, kuten määritysten lukeminen ja portteihin sitominen) ja joka luo useita työntekijä- ja auttajaprosesseja.

Työntekijäprosessit voivat kukin käsitellä tuhansia HTTP-yhteyksiä samanaikaisesti, lukea ja kirjoittaa sisältöä levylle ja kommunikoida ylävirran palvelimien kanssa. Apuprosessit (välimuistinhallinta ja välimuistin latausohjelma) voivat hallita levyn sisällön välimuistitoimintoja.

Tämä tekee sen toiminnasta skaalautuvan ja johtaa korkeaan suorituskykyyn. Tämä suunnittelutapa tekee siitä edelleen nopean, suotuisan nykyaikaisille sovelluksille. Lisäksi kolmannen osapuolen moduuleja voidaan käyttää Nginxin alkuperäisten toimintojen laajentamiseen.

Nginxillä on yksinkertainen määritystiedostorakenne, joten se on erittäin helppo konfiguroida. Se koostuu moduuleista, joita ohjataan määritystiedostossa määritetyillä direktiiveillä. Lisäksi direktiivit on jaettu ryhmädirektiiveihin ja yksinkertaisiin direktiiveihin.

Lohkomääräys määritetään aaltosulkeilla ( { ja } ). Jos estodirektiivissä voi olla muita direktiivejä aaltosulkeissa, sitä kutsutaan kontekstiksi, kuten tapahtumat, http, palvelin ja sijainti.

http {
	server {
		
	}
}

Yksinkertainen direktiivi koostuu nimistä ja parametreista välilyönneillä ja päättyy puolipisteeseen (;) .

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

		}
		
	}
}

Voit sisällyttää mukautettuja kokoonpanotiedostoja esimerkiksi sisällyttämisdirektiivin avulla.

http {
	server {

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

Käytännön esimerkki minulle oli, kuinka onnistuin konfiguroimaan Nginxin helposti suorittamaan useita verkkosivustoja eri PHP-versioilla, mikä oli pieni haaste Apachen kanssa.

Yksi Nginxin yleisimmistä käyttötavoista on sen asettaminen välityspalvelimeksi, tässä tapauksessa se vastaanottaa HTTP-pyyntöjä asiakkailta ja välittää ne yllä mainituille välityspalvelimille tai ylävirran palvelimille eri protokollien kautta. Voit myös muokata välityspalvelimelle lähetettyjä asiakaspyyntöjen otsikoita ja määrittää välityspalvelimilta tulevien vastausten puskuroinnin.

Sitten se vastaanottaa vastauksia välityspalvelimilta ja välittää ne asiakkaille. Välityspalvelimeksi määrittäminen on helpompaa kuin Apache, koska vaaditut moduulit ovat useimmissa tapauksissa oletusarvoisesti käytössä.

Staattinen sisältö tai tiedostot ovat tyypillisesti palvelintietokoneen levylle tallennettuja tiedostoja, esimerkiksi CSS-tiedostoja, JavaScripts-tiedostoja tai kuvia. Tarkastellaan skenaariota, jossa käytät Nginxiä Nodejsin (sovelluspalvelimen) käyttöliittymänä.

Vaikka Nodejs-palvelimella (erityisesti Node-kehyksillä) on sisäänrakennettuja ominaisuuksia staattiselle tiedostojen käsittelylle, niiden ei tarvitse tehdä jonkin verran intensiivistä käsittelyä ei-dynaamisen sisällön toimittamiseksi, joten on käytännöllisesti hyödyllistä määrittää verkkopalvelin tarjoamaan staattista sisältöä suoraan asiakkaita.

Nginx pystyy käsittelemään paljon paremmin staattisten tiedostojen käsittelyä tietystä hakemistosta ja voi estää staattisten resurssien pyyntöjä tukehtumasta ylävirran palvelinprosesseja. Tämä parantaa huomattavasti taustapalvelinten yleistä suorituskykyä.

Korkean suorituskyvyn ja käyttöajan saavuttaminen nykyaikaisissa verkkosovelluksissa voi edellyttää useiden sovellusten esiintymien suorittamista yhdessä tai hajautetussa HTTP-palvelimessa. Tämä voi puolestaan edellyttää kuormituksen tasapainottamisen määrittämistä kuorman jakamiseksi HTTP-palvelimien välillä.

Nykyään kuormituksen tasapainottamisesta on tullut laajalti käytetty lähestymistapa käyttöjärjestelmän resurssien käytön optimointiin, joustavuuden maksimointiin, viiveen vähentämiseen, suorituskyvyn lisäämiseen, redundanssin saavuttamiseen ja vikasietäisten kokoonpanojen luomiseen - useissa sovelluskohteissa.

Nginx käyttää seuraavia kuormituksen tasapainotusmenetelmiä:

  • round-robin (oletusmenetelmä) - pyynnöt ylävirran palvelimille jaetaan round-robin-tavalla (ylävirran palvelinten luettelon mukaisessa järjestyksessä).
  • vähiten kytketty - tässä seuraava pyyntö välitetään palvelimelle, jolla on vähiten aktiivisia yhteyksiä.
  • ip-hash - tässä hash-funktiota käytetään määrittämään, mikä palvelin tulisi valita seuraavaan pyyntöön (asiakkaan IP-osoitteen perusteella).
  • Yleinen hajautus - tällä menetelmällä järjestelmänvalvoja määrittää hash-koodin (tai avaimen) annetulla tekstillä, pyynnön tai ajonaikaisen muuttujan tai niiden yhdistelmällä. Esimerkiksi avain voi olla lähde-IP ja portti tai URI. Sitten Nginx jakaa kuorman ylävirran palvelimille luomalla hajautushetken nykyiselle pyynnölle ja sijoittamalla sen alkupalvelimia vastaan.
  • Vähiten aikaa (Nginx Plus) - määrittää seuraavan pyynnön ylävirran palvelimelle, jolla on vähiten nykyisiä yhteyksiä, mutta suosii palvelimia, joilla on pienimmät keskimääräiset vasteajat.

Lisäksi Nginx on erittäin skaalautuva ja moderni verkkosovellus, erityisesti yrityssovellukset vaativat tekniikkaa, joka tarjoaa korkean suorituskyvyn ja skaalautuvuuden.

Yksi yritys, joka hyötyy Nginxin hämmästyttävistä skaalautuvuusominaisuuksista, on CloudFlare, CloudFaren perustajien ja toimitusjohtajan Matthew Princein mukaan se on onnistunut laajentamaan verkkosovelluksensa käsittelemään yli 15 miljardia kuukausittaista sivunäkymää suhteellisen vaatimattomalla infrastruktuurilla.

Kattavampi selitys löytyy tästä artikkelista Nginx-blogissa: NGINX vs. Apache: Meidän näkemyksemme vuosikymmenen vanhasta kysymyksestä.

Sekä Apache että Nginx eivät voi korvata toisiaan, niillä on vahvuutensa ja heikkoutensa. Nginx tarjoaa kuitenkin tehokkaan, joustavan, skaalautuvan ja suojatun tekniikan modernien verkkosivustojen ja verkkosovellusten luotettavaan ja tehokkaaseen virtalähteeseen. Mikä on sinun mielipiteesi? Kerro meille alla olevan palautelomakkeen kautta.