Hvordan installere Nginx med virtuelle verter og SSL-sertifikat


Nginx (forkortelse for Engine-x) er en gratis, åpen kildekode, kraftig, høyytelses og skalerbar HTTP- og omvendt proxy-server, en e-post- og standard TCP/UDP-proxy server. Det er enkelt å bruke og konfigurere, med et enkelt konfigurasjonsspråk. Nginx er nå den foretrukne webserverprogramvaren for å drive tungt belastede nettsteder, på grunn av skalerbarheten og ytelsen.

I denne artikkelen vil vi diskutere hvordan du bruker Nginx som en HTTP-server, konfigurerer den til å tjene nettinnhold, og setter opp navnbaserte virtuelle verter, og oppretter og installerer SSL for sikre dataoverføringer, inkludert et selvsignert sertifikat på Ubuntu og CentOS .

Hvordan installere Nginx Web Server

Start først med å installere Nginx-pakken fra de offisielle depotene ved å bruke pakkebehandleren som vist.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Etter at Nginx-pakken er installert, må du starte tjenesten for nå, aktivere den til å starte automatisk ved oppstart og se statusen ved å bruke følgende kommandoer. Merk at på Ubuntu bør den startes og aktiveres automatisk mens pakken er forhåndskonfigurert.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

På dette tidspunktet skal Nginx-webserveren være oppe og kjøre, du kan bekrefte statusen med netstat-kommandoen.

sudo netstat -tlpn | grep nginx

Hvis systemet ditt har en brannmur aktivert, må du åpne port 80 og 443 for å tillate HTTP og HTTPS trafikk henholdsvis gjennom det, ved å løpe.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

Den ideelle metoden for å teste Nginx-installasjonen og sjekke om den kjører og kan betjene nettsider er ved å åpne en nettleser og peke på IP-en til serveren.

http://Your-IP-Address
OR
http://Your-Domain.com

En fungerende installasjon skal indikeres av følgende skjermbilde.

Hvordan konfigurere Nginx Web Server

Nginx sine konfigurasjonsfiler er plassert i katalogen /etc/nginx og den globale konfigurasjonsfilen ligger på /etc/nginx/nginx.conf på både CentOS og Ubuntu.

Nginx består av moduler som styres av ulike konfigurasjonsalternativer, kjent som direktiver. Et direktiv kan enten være enkelt (i formen navn og verdier avsluttet med en ;) eller blokk (har ekstra instruksjoner vedlagt med {}). Og et blokkdirektiv som inneholder andre direktiver kalles en kontekst.

Alle direktivene er uttømmende forklart i Nginx-dokumentasjonen på prosjektets nettside. Du kan se den for mer informasjon.

Hvordan servere statisk innhold ved hjelp av Nginx i frittstående modus

På et grunnleggende nivå kan Nginx brukes til å servere statisk innhold som HTML og mediefiler, i frittstående modus, der bare standard serverblokk brukes (analogt med Apache hvor ingen virtuelle verter er konfigurert).

Vi vil starte med å kort forklare konfigurasjonsstrukturen i hovedkonfigurasjonsfilen.

 
sudo vim /etc/nginx/nginx.conf

Hvis du ser på denne Nginx-konfigurasjonsfilen, skal konfigurasjonsstrukturen vises som følger, og dette omtales som hovedkonteksten, som inneholder mange andre enkle og blokk-direktiver. All nettrafikk håndteres i http-konteksten.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Følgende er et eksempel på en Nginx-hovedkonfigurasjonsfil (/etc/nginx/nginx.conf), der http-blokken ovenfor inneholder et inkluderingsdirektiv som forteller Nginx hvor den skal finne nettstedkonfigurasjonsfiler (virtuelle vertskonfigurasjoner) .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

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

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Merk at på Ubuntu vil du også finne et tilleggsdirektiv (inkluder /etc/nginx/sites-enabled/*;), der katalogen /etc /nginx/sites-enabled/ lagrer symbolkoblinger til nettstedets konfigurasjonsfiler opprettet i /etc/nginx/sites-available/, for å aktivere nettstedene. Og sletting av en symbolkobling deaktiverer det bestemte nettstedet.

Basert på installasjonskilden din finner du standard konfigurasjonsfil for nettstedet på /etc/nginx/conf.d/default.conf (hvis du installerte fra det offisielle NGINX-depotet og EPEL) eller /etc/nginx/sites-enabled/default (hvis du installerte fra Ubuntu-depoter).

Dette er vårt eksempel på standard nginx-serverblokken som ligger på /etc/nginx/conf.d/default.conf på testsystemet.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

En kort forklaring av direktivene i konfigurasjonen ovenfor:

  • lytt: angir porten serveren lytter på.
  • server_name: definerer servernavnet som kan være eksakte navn, jokertegnnavn eller regulære uttrykk.
  • root: spesifiserer katalogen som Nginx vil tjene nettsider og andre dokumenter fra.
  • indeks: angir typen(e) indeksfil(er) som skal vises.
  • plassering: brukes til å behandle forespørsler om bestemte filer og mapper.

Fra en nettleser, når du peker på serveren som bruker vertsnavnet localhost eller dens IP-adresse, behandler den forespørselen og viser filen /var/www/html/index.html, og lagrer hendelsen umiddelbart i tilgangsloggen (/var/log/nginx/access.log) med et 200 (OK) svar. I tilfelle en feil (mislykket hendelse), registrerer den meldingen i feilloggen (/var/log/nginx/error.log).

For å lære mer om å logge på Nginx, kan du se Hvordan konfigurere tilpasset tilgang eller feilloggformater i Nginx.

I stedet for å bruke standardloggfilene, kan du definere egendefinerte loggfiler for forskjellige nettsider, som vi skal se på senere, under avsnittet "opprette navnbaserte virtuelle verter (serverblokker)".

Hvordan begrense tilgangen til en nettside med Nginx

For å begrense tilgangen til nettstedet/applikasjonen eller deler av den, kan du sette opp grunnleggende HTTP-autentisering. Dette kan i hovedsak brukes til å begrense tilgangen til hele HTTP-serveren, individuelle serverblokker eller lokasjonsblokker.

Start med å lage en fil som lagrer tilgangsinformasjonen din (brukernavn/passord) ved å bruke htpasswd-verktøyet.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

Som et eksempel, la oss legge til brukeradministrator til denne listen (du kan legge til så mange brukere som mulig), der -c-alternativet brukes til å spesifisere passordfilen, og -B for å kryptere passordet. Når du trykker [Enter], vil du bli bedt om å skrive inn brukerens passord:

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

La oss deretter tildele de riktige tillatelsene og eierskapet til passordfilen (erstatt brukeren og gruppen nginx med www-data på Ubuntu).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Som vi nevnte tidligere, kan du begrense tilgangen til webserveren din, et enkelt nettsted (ved å bruke serverblokken) eller en spesifikk katalog eller fil. To nyttige direktiver kan brukes for å oppnå dette:

  • auth_basic – slår på validering av brukernavn og passord ved hjelp av «HTTP Basic Authentication»-protokollen.
  • auth_basic_user_file – spesifiserer legitimasjonsfilen.

Som et eksempel vil vi vise hvordan du passordbeskytter katalogen /var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Lagre endringer og start Nginx-tjenesten på nytt.

sudo systemctl restart nginx 

Neste gang du peker nettleseren til katalogen ovenfor (http://localhost/protected), vil du bli bedt om å skrive inn påloggingsinformasjonen din (brukernavn admin og det valgte passordet) ).

En vellykket pålogging lar deg få tilgang til katalogens innhold, ellers vil du få en «401-autorisasjon kreves»-feil.

Hvordan sette opp navnebaserte virtuelle verter (serverblokker) i Nginx

Serverkonteksten gjør at flere domener/nettsteder kan lagres i og betjenes fra samme fysiske maskin eller virtuelle private server (VPS). Flere serverblokker (som representerer virtuelle verter) kan deklareres innenfor http-konteksten for hvert nettsted/domene. Nginx bestemmer hvilken server som behandler en forespørsel basert på forespørselsoverskriften den mottar.

Vi vil demonstrere dette konseptet ved å bruke følgende dummy-domener, som hver ligger i den angitte katalogen:

  • werelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

Deretter tildeler du de riktige tillatelsene til katalogen for hvert nettsted.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Lag nå et eksempel på index.html-fil i hver public_html-katalog.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Deretter oppretter du serverblokkkonfigurasjonsfilene for hvert nettsted i /etc/httpd/conf.d-katalogen.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Legg til følgende serverblokkerklæring i wearelinux-console.net.conf-filen.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Deretter legger du til følgende serverblokkdeklarasjon i welovelinux.com.conf-filen.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

For å bruke de siste endringene, start Nginx-nettserveren på nytt.

sudo systemctl restart nginx

og ved å peke webserveren til adressene ovenfor bør du se hovedsidene til dummy-domenene.

http://wearelinux-console.net
http://welovelinux.com

Viktig: Hvis du har aktivert SELinux, tillater ikke standardkonfigurasjonen Nginx å få tilgang til filer utenfor velkjente autoriserte steder (som f.eks. /etc/nginx for konfigurasjoner, /var/log/nginx for logger, /var/www/html for nettfiler osv.) .

Du kan håndtere dette ved å enten deaktivere SELinux, eller sette riktig sikkerhetskontekst. For mer informasjon, se denne veiledningen: bruk av Nginx og Nginx Plus med SELinux på Nginx Plus-nettstedet.

Hvordan installere og konfigurere SSL med Nginx

SSL-sertifikater bidrar til å aktivere sikker http (HTTPS) på nettstedet ditt, noe som er avgjørende for å etablere en pålitelig/sikker forbindelse mellom sluttbrukerne og serveren din ved å kryptere informasjonen som overføres til, fra eller innenfor nettstedet ditt.

Vi vil dekke hvordan du oppretter og installerer et selvsignert sertifikat, og genererer en sertifikatsigneringsforespørsel (CSR) for å anskaffe et SSL-sertifikat fra en sertifiseringsinstans (CA), å bruke med Nginx.

Selvsignerte sertifikater er gratis å lage og er praktisk talt gode å gå for testformål og for interne LAN-tjenester. For offentlige servere anbefales det sterkt å bruke et sertifikat utstedt av en CA (for eksempel Let's Encrypt) for å opprettholde ektheten.

For å opprette et selvsignert sertifikat må du først opprette en katalog der sertifikatene dine skal lagres.

sudo mkdir /etc/nginx/ssl-certs/

Generer deretter ditt selvsignerte sertifikat og nøkkelen ved å bruke openssl kommandolinjeverktøyet.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

La oss kort beskrive alternativene som brukes i kommandoen ovenfor:

  • req -X509 – viser at vi lager et x509-sertifikat.
  • -noder (NO DES) – betyr "ikke krypter nøkkelen".
  • -dager 365 – angir antall dager sertifikatet vil være gyldig for.
  • -newkey rsa:2048 – spesifiserer at nøkkelen som genereres ved hjelp av RSA-algoritmen, skal være 2048-bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key – spesifiserer hele banen til RSA-nøkkelen.
  • -out /etc/nginx/ssl-certs/nginx.crt – spesifiserer hele banen til sertifikatet.

Deretter åpner du den virtuelle vertskonfigurasjonsfilen og legger til følgende linjer i en serverblokkerklæring som lytter på port 443. Vi vil teste med den virtuelle vertsfilen /etc/nginx/conf.d/wearelinux-console.net.conf.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Legg deretter til ssl-direktivet til nginx-konfigurasjonsfilen, den skal se ut som nedenfor.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Start nå Nginx på nytt og pek nettleseren til følgende adresse.

https://www.wearelinux-console.net

Hvis du ønsker å kjøpe et SSL-sertifikat fra en CA, må du generere en sertifikatsigneringsforespørsel (CSR) som vist.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Du kan også opprette en CSR fra en eksisterende privat nøkkel.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Deretter må du sende CSR som er generert til en CA for å be om utstedelse av et CA-signert SSL-sertifikat. Når du mottar sertifikatet ditt fra CA, kan du konfigurere det som vist ovenfor.

Les også: Den ultimate guiden for å sikre, herde og forbedre ytelsen til Nginx Web Server

Sammendrag

I denne artikkelen har vi forklart hvordan du installerer og konfigurerer Nginx; dekket hvordan du setter opp navnebasert virtuell hosting med SSL for å sikre dataoverføringer mellom webserveren og en klient.

Hvis du opplevde tilbakeslag under nginx-installasjons-/konfigurasjonsprosessen eller har spørsmål eller kommentarer, bruk tilbakemeldingsskjemaet nedenfor for å nå oss.