En introduktion til NGINX for udviklere

Forestil dig dette - du har oprettet en webapplikation og søger nu efter den rigtige webserver at være vært for den fra.

Din ansøgning kan bestå af flere statiske filer - HTML, CSS og JavaScript, en backend API-service eller endda flere webservices. Brug af Nginx kan være det, du leder efter, og der er nogle af grundene til det.

NGINX er en kraftfuld webserver og bruger en ikke-gevind, hændelsesdrevet arkitektur, der gør det muligt at overgå Apache, hvis den er konfigureret korrekt. Det kan også gøre andre vigtige ting, såsom belastningsbalancering, HTTP-cache, eller bruges som en reverse proxy.

NGINX Arkitektur

I denne artikel vil jeg dække et par grundlæggende trin om, hvordan du installerer og konfigurerer de mest almindelige dele af NGINX.

Grundlæggende installation - Arkitektur

Der er to måder at installere NGINX, enten ved hjælp af en forudbygget binær eller opbygning af den fra kilden.

Den første metode er meget nemmest og hurtigere, men at opbygge den fra kilden giver mulighed for at inkludere forskellige tredjepartsmoduler, der gør NGINX endnu mere kraftfuld. Det giver os mulighed for at tilpasse det, så det passer til applikationens behov.

For at installere en forudbygget Debian-pakke er det eneste, du skal gøre, at:

sudo apt-get-opdatering
sudo apt-get install nginx

Når installationsprocessen er afsluttet, kan du bekræfte, at alt er i orden ved at køre kommandoen nedenfor, som skal udskrive den nyeste version af NGINX.

sudo nginx -v
nginx version: nginx / 1.6.2

Din nye webserver installeres på lokationen / etc / nginx /. Hvis du går ind i denne mappe, vil du se flere filer og mapper. De vigtigste, der senere kræver vores opmærksomhed, er filen nginx.conf og de mapper, der er tilgængelige.

Konfigurationsindstillinger

Kerneindstillingerne for NGINX er i filen nginx.conf, som som standard ser sådan ud.

bruger www-data;
arbejder_processer 4;
pid /run/nginx.pid;

begivenheder {
arbejdstagerforbindelser 768;
# multi_accept på;
}

http {

sendfil på;
tcp_nopush tændt;
tcp_nodelay tændt;
keepalive_timeout 65;
typer_hash_max_ størrelse 2048;
# server_tokens slukket;

# server_names_hash_bucket_ størrelse 64;
# server_name_in_redirect slået fra;

inkluderer /etc/nginx/mime.types;
default_type applikation / octet-stream;

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

gzip på;
gzip_afviselig "msie6";

# gzip_vary på;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffere 16 8k;
# gzip_http_version 1.1;
# gzip_types tekst / almindelig tekst / css-applikation / json-applikation / x-javascript-tekst / xml-applikation / xml-applikation / xml + rss-tekst / javascript;

inkluderer /etc/nginx/conf.d/*.conf;
inkluderer / etc / nginx / sites-enabled / *;
}

Filen er struktureret i kontekster. Den første er begivenhedskonteksten, og den anden er http-konteksten. Denne struktur muliggør en vis avanceret lagdeling af din konfiguration, da hver kontekst kan have andre indlejrede kontekster, der arver alt fra deres overordnede, men også kan tilsidesætte en indstilling efter behov.

Forskellige ting i denne fil kan tilpasses baseret på dine behov, men NGINX er så enkel at bruge, at du kan gå sammen, selv med standardindstillingerne. Nogle af de vigtigste stykker i NGINX-konfigurationsfilen er:

  • arbejder_processer: Denne indstilling definerer antallet af arbejdsprocesser, som NGINX vil bruge. Da NGINX er enkelttrådet, bør dette antal normalt være lig med antallet af CPU-kerner.
  • arbejder_forbindelser: Dette er det maksimale antal samtidige forbindelser for hver arbejdsproces og fortæller vores arbejdstager processer, hvor mange mennesker der samtidig kan betjenes af NGINX. Jo større det er, jo flere samtidige brugere vil NGINX kunne betjene.
  • access_log & error_log: Dette er de filer, som NGINX vil bruge til at logge eventuelle erroer og adgangsforsøg. Disse logfiler gennemgås generelt for fejlfinding og fejlfinding.
  • gzip: Dette er indstillingerne for GZIP-komprimering af NGINX-svar. Aktivering af denne sammen med de forskellige underindstillinger, der som standard er kommenteret, vil resultere i en ganske stor præstationsopgradering. Fra underindstillingerne i GZIP skal man sørge for gzip_comp_level, som er komprimeringsniveauet og spænder fra 1 til 10. Generelt bør denne værdi ikke være over 6 - gevinsten med hensyn til størrelsesreduktion er ubetydelig, da det har brug for meget mere CPU-brug. gzip_types er en liste over svarstyper, som komprimering vil blive anvendt på.

Din NGINX-installation kan understøtte langt mere end et enkelt websted, og filerne, der definerer din servers websteder, lever i / etc / nginx / sites-tilgængelige bibliotek.

Dog er filerne i dette bibliotek ikke "live" - ​​du kan have så mange site definition-filer her, som du vil, men NGINX gør faktisk ikke noget med dem, medmindre de er linket til / etc / nginx / webstedsaktiveret bibliotek (du kan også kopiere dem der, men symlinking sikrer, at der kun er en kopi af hver fil for at holde styr på).

Dette giver dig en metode til hurtigt at sætte websteder online og tage dem offline uden faktisk at skulle slette nogen filer - når du er klar til et websted til at gå online, symlink det til sider aktiveret og genstart NGINX.

Det websted-tilgængelige bibliotek inkluderer konfigurationer til virtuelle værter. Dette gør det muligt at konfigurere webserveren til flere websteder, der har separate konfigurationer. Webstederne i dette bibliotek er ikke live og er kun aktiveret, hvis vi opretter et symbolsk link til den sites-aktiverede mappe.

Opret enten en ny fil til din applikation, eller rediger standardfilen. En typisk konfiguration ligner den nedenunder.

upstream remoteApplicationServer {
    server 10.10.10.10;
}

opstrøms fjernAPIServer {
    server 20.20.20.20;
    server 20.20.20.21;
    server 20.20.20.22;
    server 20.20.20.23;
}


server {
    lyt 80;
    servernavn www.customapp.com customapp.com
    root / var / www / html;
    index index.html

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

        placering / fjernbetjening {
            proxy_set_header Host $ vært: $ server_port;
            proxy_set_header X-Real-IP $ remote_addr;
            proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
            proxy_pass http: // remoteAPIServer /;
        }

        placering / api / v1 / {
            proxy_pass https: // remoteAPIServer / api / v1 /;
            proxy_http_version 1.1;
            proxy_set_header Opgradering $ http_upgrade;
            proxy_set_header Forbindelse 'opgradering';
            proxy_set_header Host $ vært;
            proxy_cache_bypass $ http_upgrade;
            proxy_redirect http: // https: //;
        }
}

Ligesom nginx.conf bruger denne også konceptet med indlejrede kontekster (og alle disse er også indlejret i HTTP-konteksten af ​​nginx.conf, så de også arver alt fra det).

Serverkonteksten definerer en bestemt virtuel server til at håndtere dine klienters anmodninger. Du kan have flere serverblokke, og NGINX vælger mellem dem baseret på lytte- og servernavndirektiverne.

Inde i en serverblok definerer vi flere lokationskontekster, der bruges til at bestemme, hvordan man skal håndtere klientanmodningerne. Hver gang en anmodning kommer ind, vil NGINX forsøge at matche sin URI til en af ​​disse placeringsdefinitioner og håndtere den i overensstemmelse hermed.

Der er mange vigtige direktiver, der kan bruges under lokationskontekst, såsom:

  • try_files vil forsøge at tjene en statisk fil, der findes under den mappe, der peger på roddirektivet.
  • proxy_pass sender anmodningen til en specificeret proxieserver.
  • omskrivning vil omskrive den indkommende URI baseret på et regelmæssigt udtryk, så en anden placeringsblok vil være i stand til at håndtere det.

Opstrøms konteksten definerer en pool af servere, som NGINX vil proxy forespørgsler til. Når vi har oprettet en opstrømsblok og defineret en server inde i den, kan vi derefter henvise den til navn inde i vores placeringsblokke. Derudover kan en opstrøms kontekst have mange servere tildelt under den, så NGINX vil foretage en vis belastningsbalancering, når proxys forespørgsler.

Start NGINX

Når vi er færdig med konfigurationen og har flyttet vores webapplikation til den relevante mappe, kan vi starte NGINX ved hjælp af kommandoen nedenfor:

sudo service nginx start

Efter dette, hver gang vi ændrer noget i vores konfiguration, skal vi kun genindlæse det (uden nedetid) ved hjælp af kommandoen nedenfor.

service nginx genindlæses

Til sidst kan vi kontrollere NGINXs status ved hjælp af kommandoen nedenfor.

service nginx-status

Konklusion

Med så mange funktioner ud af boksen, kan NGINX være en fantastisk måde at tjene din applikation eller endda bruges som en HTTP-proxy eller belastningsbalancer til dine andre webservere. At forstå, hvordan NGINX fungerer og håndterer anmodninger, giver en masse kraft til at skalere og afbalancere belastningen på dine applikationer.