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


Netcraftin viimeisimmän, vuoden 2017 lopulla (täsmälleen marraskuussa) tekemän web-palvelintutkimuksen mukaan Apache ja Nginx ovat eniten käytetyt avoimen lähdekoodin web-palvelimet 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-palveluita synkronoituna vallitsevien HTTP-standardien kanssa.

Apache on julkaisustaan lähtien ollut Internetin suosituin verkkopalvelin vuodesta 1996 lähtien. Se on tosiasiallinen standardi web-palvelimille Linuxissa ja avoimen lähdekoodin ekosysteemissä. Uusien Linux-käyttäjien on yleensä helpompi asentaa ja käyttää.

Nginx (lausutaan Engine-x) on ilmainen avoimen lähdekoodin tehokas 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.

Se on tunnettu korkeasta suorituskyvystään, vakaudestaan, yksinkertaisesta konfiguraatiostaan ja alhaisesta resurssienkulutuksestaan, ja se on vuosien saatossa tullut niin suosituksi, ja sen käyttö Internetissä on matkalla yhä suurempiin korkeuksiin. Se on nyt web-palvelin kokeneiden järjestelmänvalvojien tai huippusivustojen webmasterin joukossa.

Jotkut kiireisistä sivustoista, joita tarjoaa:

  • 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 Apachen ja Nginxin vertailusta (tarkoitan todella Apache vs Nginx -artikkeleita), monet joista selostetaan selkeästi yksityiskohtaisesti, niiden tärkeimmät ominaisuudet ja toiminnot erilaisissa skenaarioissa, mukaan lukien suorituskykymittaukset laboratorion vertailuarvoissa. Siksi sitä ei käsitellä tässä.

Kerron vain kokemukseni ja ajatukseni koko keskustelusta, kun olen kokeillut Apachea ja Nginxiä, molemmat tuotantoympäristöissä, jotka perustuvat nykyaikaisten verkkosovellusten isännöintivaatimuksiin. osio.

Syyt, miksi löydän Nginxin käytännössä paremmaksi kuin Apache

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

1. Nginx on kevyt

Nginx on yksi kevyistä verkkopalvelimista. Sillä on pieni jalanjälki järjestelmässä verrattuna Apacheen, joka toteuttaa laajan valikoiman sovelluksen suorittamiseen tarvittavia toimintoja.

Koska Nginx kokoaa kourallisen ydinominaisuuksia, se luottaa omistettuihin kolmannen osapuolen ylävirran verkkopalvelimiin, kuten Apache-taustajärjestelmään, FastCGI-, Memcached-, SCGI- ja uWSGI-palvelimiin tai sovelluspalvelimeen, eli kielikohtaisiin palvelimiin, kuten Node.js, Tomcat. , jne.

Siksi sen muistin käyttö sopii paljon paremmin rajoitettujen resurssien käyttöönotuksiin kuin Apache.

2. Nginx on suunniteltu korkeaa samanaikaisuutta varten

Toisin kuin Apachen kierteitetty tai prosessisuuntautunut arkkitehtuuri (prosessi-yhteys tai säie-per-yhteys -malli), Nginx käyttää skaalautuvaa, tapahtumapohjaista (asynkronista) arkkitehtuuria. Se käyttää vastuullista prosessimallia, joka on räätälöity käytettävissä oleviin laitteistoresursseihin.

Siinä on pääprosessi (joka suorittaa etuoikeutetut toiminnot, kuten määritysten lukemisen ja portteihin sitoutumisen) ja joka luo useita työntekijä- ja apuprosesseja.

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älimuistin hallinta ja välimuistilataaja) voivat hallita kiintolevyn sisällön välimuistitoimintoja.

Tämä tekee sen toiminnoista skaalautuvan ja tuloksena korkean suorituskyvyn. Tämä suunnittelutapa tekee siitä nopean ja suotuisan nykyaikaisiin sovelluksiin. Lisäksi kolmannen osapuolen moduuleja voidaan käyttää laajentamaan Nginxin alkuperäisiä toimintoja.

3. Nginx on helppo määrittää

Nginxillä on yksinkertainen määritystiedostorakenne, joten sen määrittäminen on erittäin helppoa. Se koostuu moduuleista, joita ohjataan asetustiedostossa määritellyillä direktiiveillä. Lisäksi direktiivit jaetaan ryhmädirektiiveihin ja yksinkertaisiin direktiiveihin.

Lohkodirektiivi määritellään aaltosulkeilla ({ ja }). Jos lohkodirektiivissä voi olla muita direktiivejä aaltosulkeissa, sitä kutsutaan kontekstiksi, kuten tapahtumat, http, palvelin ja sijainti.

http {
	server {
		
	}
}

Yksinkertainen käsky koostuu nimestä ja parametreista, jotka erotetaan välilyönnillä ja päättyy puolipisteeseen (;).

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

		}
		
	}
}

Voit sisällyttää mukautettuja konfiguraatiotiedostoja käyttämällä esimerkiksi include-direktiiviä.

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 helposti määrittämään Nginx ajamaan useita verkkosivustoja eri PHP-versioilla, mikä oli pieni haaste Apachen kanssa.

4. Nginx on erinomainen käyttöliittymävälityspalvelin

Yksi Nginxin yleisimmistä käyttötavoista on sen asettaminen välityspalvelimeksi. Tässä tapauksessa se vastaanottaa HTTP-pyynnöt asiakkailta ja välittää ne edellä mainituille välityspalvelimelle tai ylävirran palvelimille eri protokollien kautta. Voit myös muokata välityspalvelimelle lähetettäviä asiakaspyyntöotsikoita ja määrittää välityspalvelimelta tulevien vastausten puskuroinnin.

Sitten se vastaanottaa vastaukset välityspalvelimelta ja välittää ne asiakkaille. Välityspalvelimeksi määrittäminen on paljon helpompaa kuin Apache, koska tarvittavat moduulit ovat useimmissa tapauksissa oletuksena käytössä.

5. Nginx on merkittävä staattisen sisällön tarjoamisessa

Staattinen sisältö tai tiedostot ovat yleensä tiedostoja, jotka on tallennettu palvelintietokoneen levylle, esimerkiksi CSS-tiedostoja , JavaScript-tiedostoja tai kuvia. Tarkastellaan tilannetta, jossa käytät Nginxiä Nodejsin (sovelluspalvelimen) käyttöliittymänä.

Vaikka Nodejs-palvelimella (erityisesti Node-kehyksellä) on sisäänrakennettuja ominaisuuksia staattista tiedostojen käsittelyä varten, niiden ei tarvitse tehdä intensiivistä käsittelyä ei-dynaamisen sisällön toimittamiseksi, joten on käytännössä hyödyllistä määrittää verkkopalvelin palvelemaan staattista sisältöä suoraan asiakkaita.

Nginx pystyy käsittelemään staattisia tiedostoja tietystä hakemistosta paljon paremmin ja voi estää staattisia resursseja koskevia pyyntöjä tukahduttamasta alkupään palvelinprosesseja. Tämä parantaa merkittävästi taustapalvelinten yleistä suorituskykyä.

6. Nginx on tehokas kuormantasaaja

Nykyaikaisten verkkosovellusten korkean suorituskyvyn ja käytettävyyden saavuttaminen voi vaatia useiden sovellusten suorittamista yhdellä tai hajautetulla HTTP-palvelimella. Tämä voi puolestaan edellyttää kuormituksen tasapainotuksen määrittämistä kuorman jakamiseksi HTTP-palvelimiesi välillä.

Nykyään kuormituksen tasapainotuksesta on tullut laajalti käytetty lähestymistapa käyttöjärjestelmän resurssien käytön optimointiin, joustavuuden maksimoimiseen, viiveen vähentämiseen, suorituskyvyn lisäämiseen, redundanssin saavuttamiseen ja vikasietoisten kokoonpanojen luomiseen useissa sovellusesiintymissä.

Nginx käyttää seuraavia kuormituksen tasausmenetelmiä:

  • Round-robin (oletusmenetelmä) – pyynnöt ylävirran palvelimille jaetaan round-robin-periaatteella (upstream poolin palvelimien luettelon mukaisessa järjestyksessä).
  • vähiten yhdistetty – 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 on valittava seuraavaa pyyntöä varten (asiakkaan IP-osoitteen perusteella).
  • Yleinen hash – tässä menetelmässä järjestelmänvalvoja määrittää tiivisteen (tai avaimen) annetulla tekstillä, pyynnön tai suoritusajan muuttujilla tai niiden yhdistelmällä. Avain voi olla esimerkiksi lähteen IP ja portti tai URI. Nginx jakaa sitten kuorman ylävirran palvelimien kesken luomalla hajautusarvon nykyiselle pyynnölle ja sijoittamalla sen ylävirran palvelimia vastaan.
  • Pienin aika (Nginx Plus) – määrittää seuraavan pyynnön ylävirran palvelimelle, jolla on vähiten nykyisiä yhteyksiä, mutta suosii palvelimia, joilla on alhaisin keskimääräinen vastausaika.

7. Nginx on erittäin skaalautuva

Lisäksi Nginx on erittäin skaalautuva ja modernit verkkosovellukset, erityisesti yrityssovellukset, vaativat teknologiaa, joka tarjoaa korkean suorituskyvyn ja skaalautuvuuden.

Yksi yritys, joka hyötyy Nginxin upeista skaalautuvuusominaisuuksista, on CloudFlare. Matthew Princen mukaan se on onnistunut skaalaamaan verkkosovelluksensa käsittelemään yli 15 miljardia kuukausittaista sivun katselukertaa suhteellisen vaatimattomalla infrastruktuurilla., CloudFaren perustaja ja toimitusjohtaja.

Saat kattavamman selityksen Nginx-blogin artikkelista: NGINX vs. Apache: Our View of a Decade-Old Question.

Johtopäätös

Sekä Apachea että Nginxiä ei voi korvata toisillaan, niillä on vahvuutensa ja heikkoutensa. Nginx tarjoaa kuitenkin tehokkaan, joustavan, skaalautuvan ja suojatun tekniikan nykyaikaisten verkkosivustojen ja verkkosovellusten luotettavaan ja tehokkaaseen tehostamiseen. Mikä on sinun kantasi? Kerro meille alla olevan palautelomakkeen kautta.