Johdanto NGINX: ään kehittäjille

Kuva tästä - olet luonut verkkosovelluksen ja etsit nyt oikeaa web-palvelinta, jolla sitä ylläpidetään.

Sovelluksesi voi koostua useista staattisista tiedostoista - HTML, CSS ja JavaScript, backend API -palvelusta tai jopa useasta verkkopalvelusta. Nginxin käyttäminen saattaa olla mitä etsit, ja siihen on muutama syy.

NGINX on tehokas verkkopalvelin, joka käyttää kierteetöntä, tapahtumapohjaista arkkitehtuuria, jonka avulla se voi ylittää Apache-ohjelman, jos se on määritetty oikein. Se voi myös tehdä muita tärkeitä asioita, kuten kuormituksen tasapainotus, HTTP-välimuisti tai käyttää käänteisenä välityspalvelimena.

NGINX-arkkitehtuuri

Tässä artikkelissa käsittelen muutamia perusvaiheita NGINX: n yleisimpien osien asentamisesta ja määrittämisestä.

Perusasennus - arkkitehtuuri

NGINX: n asentamiseen on kaksi tapaa: joko käyttämällä valmiiksi rakennettua binääristä tai rakentamalla se lähteestä.

Ensimmäinen menetelmä on paljon helpoin ja nopeampi, mutta sen rakentaminen lähteestä tarjoaa mahdollisuuden sisällyttää erilaisia ​​kolmansien osapuolien moduuleja, jotka tekevät NGINXistä vieläkin tehokkaamman. Sen avulla voimme mukauttaa sen sovelluksen tarpeisiin.

Asentaaksesi valmiiksi rakennetun Debian-paketin, sinun on tehtävä vain:

sudo apt-get-päivitys
sudo apt-get install nginx

Kun asennus on valmis, voit varmistaa, että kaikki on kunnossa suorittamalla alla oleva komento, jonka pitäisi tulostaa NGINX: n uusin versio.

sudo nginx -v
nginx-versio: nginx / 1.6.2

Uusi verkkopalvelimesi asennetaan sijaintiin / etc / nginx /. Jos siirryt tämän kansion sisään, näet useita tiedostoja ja kansioita. Tärkeimmät niistä, jotka vaativat huomioomme myöhemmin, ovat tiedosto nginx.conf ja kansio site-available.

Kokoonpanoasetukset

NGINX: n ydinasetukset ovat nginx.conf-tiedostossa, joka oletuksena näyttää tältä.

käyttäjän www-data;
työprosessit 4;
pid /run/nginx.pid;

Tapahtumat {
työyhteydet 768;
# multi_accep on;
}

http {

lähetä tiedosto;
tcp_nopush päällä;
tcp_nodelay on;
keepalive_timeout 65;
type_hash_max_size 2048;
# server_tokens pois;

# server_names_hash_bucket_size 64;
# server_name_in_redirect pois;

sisältävät /etc/nginx/mime.types;
oletus_tyyppinen sovellus / oktettivirta;

access_log /var/log/nginx/access.log;
virhe_logi /var/log/nginx/error.log;

gzip päälle;
gzip_disable "msie6";

# gzip_vary päällä;
# gzip_proxied mitään;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text / plain text / css application / json application / x-javascript text / xml application / xml application / xml + rss text / javascript;

sisältävät /etc/nginx/conf.d/*.conf;
sisällytä / etc / nginx / sivustot-käytössä / *;
}

Tiedosto on rakennettu konteksteihin. Ensimmäinen on tapahtumien konteksti ja toinen on http-konteksti. Tämä rakenne mahdollistaa konfiguraation edistyneemmän kerrostamisen, koska jokaisessa kontekstissa voi olla muita sisäkkäisiä konteksteja, jotka perivät kaiken vanhemmiltaan, mutta voivat myös ohittaa asetuksen tarpeen mukaan.

Useita tämän tiedoston asioita voidaan mukauttaa tarpeidesi perusteella, mutta NGINX on niin helppo käyttää, että voit mennä mukaan myös oletusasetuksilla. Jotkut NGINX-asetustiedoston tärkeimmistä palasista ovat:

  • työnvaihtoprosessit: Tämä asetus määrittelee työntekijäprosessien lukumäärän, jota NGINX käyttää. Koska NGINX on yksikierteinen, tämän määrän tulisi yleensä olla yhtä suuri kuin CPU-ytimien lukumäärä.
  • työyhteydet: Tämä on suurin sallittu määrä samanaikaisia ​​yhteyksiä kullekin työntekijäprosessille ja kertoo työntekijäprosesseillemme, kuinka monta ihmistä voi palvella samanaikaisesti NGINX. Mitä suurempi se on, sitä enemmän samanaikaisia ​​käyttäjiä NGINX pystyy palvelemaan.
  • access_log & error_log: Nämä ovat tiedostot, joita NGINX käyttää virheiden ja pääsyyritysten kirjaamiseen. Nämä lokit tarkistetaan yleensä virheenkorjausta ja vianetsintää varten.
  • gzip: Nämä ovat asetukset GZIP-pakkaukselle NGINX-vastauksista. Jos tämä otetaan käyttöön oletusarvoisesti kommentoitavien eri asetusten kanssa, tuloksena on melko suuri suorituskyvyn päivitys. GZIP: n ala-asetuksista on huolehdittava gzip_comp_level -tasosta, joka on pakkaustaso ja vaihtelee välillä 1-10. Yleensä tämän arvon ei pitäisi olla yli 6 - koon pienennysvaikutus on merkityksetön, koska se tarvitsee paljon enemmän suorittimen käyttöä. gzip_types on luettelo vastaustyypeistä, joihin pakkausta käytetään.

NGINX-asennus voi tukea paljon muuta kuin yhtä verkkosivustoa, ja palvelimen sivustot määrittelevät tiedostot sijaitsevat hakemistossa / etc / nginx / sites-available.

Tämän hakemiston tiedostot eivät kuitenkaan ole ”eläviä” ​​- täällä voi olla niin monta sivustotunnistustiedostoa kuin haluat, mutta NGINX ei oikeastaan ​​tee mitään niiden kanssa, ellei niitä ole linkitetty / etc / nginx / sivustojen käytössä oleva hakemisto (voit myös kopioida ne sinne, mutta linkitys varmistaa, että jokaisesta tiedostosta on vain yksi kopio seurataksesi).

Tämä antaa sinulle menetelmän, jolla verkkosivustot saatetaan nopeasti verkkoon ja siirretään offline-tilaan ilman, että sinun tarvitsee tosiasiallisesti poistaa tiedostoja - kun olet valmis sivustoon menemään verkossa, linkitä se sivustojen käyttöön ja käynnistä NGINX uudelleen.

Sivustojen käytettävissä oleva hakemisto sisältää virtuaalisten isäntien kokoonpanot. Tämän avulla web-palvelin voidaan määrittää useille sivustoille, joilla on erilliset kokoonpanot. Tämän hakemiston sivustot eivät ole aktiivisia, ja ne ovat käytössä vain, jos luomme symbolisen linkin sivustoja käyttävään kansioon.

Luo joko uusi tiedosto sovelluksellesi tai muokkaa oletustiedostoa. Tyypillinen kokoonpano näyttää alla olevalta.

ylävirtaan remoteApplicationServer {
    palvelin 10.10.10.10;
}

ylävirran kaukoAPIS-palvelin {
    palvelin 20.20.20.20;
    palvelin 20.20.20.21;
    palvelin 20.20.20.22;
    palvelin 20.20.20.23;
}


palvelin {
    kuuntele 80;
    palvelimen_nimi www.customapp.com customapp.com
    juuri / var / www / html;
    hakemisto index.html

        sijainti / {
            alias / var / www / html / customapp /;
            try_files $ uri $ uri / = 404;
        }

        sijainti / Remoteapp {
            proxy_set_header Host $ host: $ server_port;
            proxy_set_header X-Real-IP $ remote_addr;
            proxy_set_header X-Forward-For $ proxy_add_x_fordary_for;
            välityspalvelin_päästö http: // remoteAPIServer /;
        }

        sijainti / api / v1 / {
            proxy_pass https: // remoteAPIServer / api / v1 /;
            proxy_http_version 1.1;
            proxy_set_header Päivitä $ http_upgrade;
            proxy_set_header Yhteyden 'päivitys';
            proxy_set_header Host $ host;
            proxy_cache_bypass $ http_upgrade;
            välityspalvelin_suora http: // https: //;
        }
}

Aivan kuten nginx.conf, tämä käyttää myös sisäkkäisten konteksttien käsitettä (ja nämä kaikki ovat myös sisäkkäisiä nginx.conf: n HTTP-kontekstiin, joten ne myös perivät kaiken siitä).

Palvelinkonteksti määrittelee tietyn virtuaalipalvelimen asiakkaiden pyyntöjen käsittelemiseksi. Sinulla voi olla useita palvelinlohkoja, ja NGINX valitsee niiden välillä kuuntelu- ja palvelin_nimidirektiivien perusteella.

Palvelinlohkon sisällä määrittelemme useita sijaintiyhteyksiä, joita käytetään päättämään, kuinka käsitellä asiakaspyyntöjä. Aina kun pyyntö tulee, NGINX yrittää sovittaa URI: nsa johonkin näistä sijaintimääritelmistä ja käsittelee sitä vastaavasti.

On monia tärkeitä direktiivejä, joita voidaan käyttää sijaintiyhteydessä, kuten:

  • try_files yrittää palvella staattista tiedostoa, joka löytyy kansiosta, joka osoittaa juuridirektiiviin.
  • proxy_pass lähettää pyynnön määrätylle välityspalvelimelle.
  • rewrite kirjoittaa tulevan URI: n säännöllisen lausekkeen perusteella, jotta toinen sijaintilohko pystyy käsittelemään sitä.

Upstream-konteksti määrittelee palvelinjoukon, johon NGINX välittää välityspyynnöt. Kun olemme luoneet ylävirran lohkon ja määritelleet sen sisällä olevan palvelimen, voimme sitten viitata siihen nimen mukaan sijaintilohkojemme sisällä. Lisäksi ylävirtaan liittyvässä kontekstissa voi olla osoitettu monia palvelimia sen alle, jotta NGINX suorittaa jonkin verran kuormituksen tasapainottamista pyyntöjen välityspalvelun aikana.

Käynnistä NGINX

Kun olemme määrittäneet määritykset ja olemme siirtäneet verkkosovelluksemme oikeaan kansioon, voimme käynnistää NGINX-komennon alla olevan komennon avulla:

sudo service nginx start

Sen jälkeen, kun muutamme jotain kokoonpanossa, meidän on vain ladattava se uudelleen (ilman seisokkeja) alla olevan komennon avulla.

palvelun nginx uudelleenlataus

Viimeiseksi voimme tarkistaa NGINXin tilan alla olevan komennon avulla.

palvelun nginx-tila

johtopäätös

Koska niin monia ominaisuuksia ei ole käytettävissä, NGINX voi olla loistava tapa palvella sovellustasi tai jopa käyttää HTTP-välityspalvelimena tai kuormituksen tasapainottajana muille Web-palvelimillesi. NGINX: n toiminnan ja pyyntöjen käsittelytavan ymmärtäminen antaa paljon voimaa sovellusten mitoittamiseen ja tasapainottamiseen.